экспериментировал с подобными штуками . функционал получался такой-же как у вас. Пробовал использовать в практике, но в итоге получается что проще классическим способом написать код или немного поменять алгоритм.
сейчас подумываю упростить. получается что-та вроде цепочки с паузами.
var sync = new ....;
setTimeout(sync(), 1000);
setTimeout(sync(), 100);
sync(function() {
});
setTimeout(sync(), 100);
var xx = sync();
sync(function() {
....
setTimeout(xx, 1000);
....
});
sync(function() {
});