проблема была в том, что действия надо было произвести не в js, а в с++ программе, вызвавшей js скрипт. в общем, проблема решена. как было сказано выше, я не учитывал то, что функция работает асинхронно. поэтому когда я возвращал значение из getAddressByCoordinates(), то переменной не было присвоено значение, так как асинхронная функция ничего не присвоила переменной еще. она присвоит потом, когда уже будет вызван return.
в общем решилось все высылкой сигнала с нужным параметром-адресом (в Qt есть такая полезная вещь) из асинхронной функции в с++ программу.
function getAddressByCoordinates(lat, lon, pointId)
{
ymaps.geocode([lat, lon]).then(function (res)
{
var names = [];
res.geoObjects.each(function (obj)
{
names.push(obj.properties.get('name'));
});
jsObject.address(names.reverse().join(', '), pointId);
});
}
где jsObject - Qt/c++ объект с сигналом void address(QString address, int pointId)