Вы, кажется, не понимаете асинхронной работы в JS. Функция SetTimeout не ждёт указанное время (у вас 2 секунды). Она настраивает таймер и сразу же возвращается. Указанная в SetTimeout функция через указанное время будет поставлена в очередь вызовов JS и запущена, когда до неё дойдёт очередь.
Таким образом, функция bbb, вызванная из aaa завершится практически сразу же. Вы можете записать так:
function bbb() {
if(...) {
variable = true;
return;
}
SetTimeout(bbb, 2000);
}
Но переменная изменится только по срабатыванию условия, когда функция aaa давно уже завершится.