В результате написал функцию которая принимает 3 параметра: 1) значение которое должно быть у списочного свойства, 2) Ид инфоблока, 3) код свойства - функция возвращает Ид существующего свойства, а если не найдёт - создает запись в свойстве и возвращает её Ид. При ошибке возвращается false
Код функции и примеры использования тут 
blog.ivru.net/?id=175
Непосредственно по заданному вопросу, создание товаров или торговых предложений с привязкой свойства типа список(enum) осуществляется следующим образом:
$el = new CIBlockElement;
$arLoadProductArray = array(
  "IBLOCK_ID"=>2, // IBLOCK торговых предложений
  "NAME"=>"Имя торгового предложения",
  "ACTIVE"=>"Y",
  "PROPERTY_VALUES"=>array(
    "CML2_LINK"=>$PRODUCT_ID, // Свойство типа "Привязка к товарам (SKU)", связываем торг. предложение с товаром
    "CML2_ARTICLE"=>"Артикул торгового предложения",
    "SIZE"=>$sizePropId,
    "CLOTH"=>$clothPropId
  )
);
$product_offer_id = $el->Add($arLoadProductArray);
В коде выше у меня свойства SIZE и CLOTH типа список(enum) в переменных $sizePropId и $clothPropId передаются идентификаторы необходимых значений свойств.
Для получения идентификатора по значению, я привёл ссылку на соответствующую функцию.