От проблемы простукивания удалось избавиться с помощью другой реализации этого простукивания. Вместо setInterval я использовал
(function inner() {
// Выполняем действия
if (/* больше ничего делать не надо */) {
callback();
} else {
setTimeout(inner, 500);
}
})();
Но вопрос с поочередным обращением к одной функции все равно остается открытым. Интересно