Кстате, наглядно и доходчиво про EventLoop(Хабр)
И да, подкатом говнокод страшенный, но вынос вторичной перекраски кнопки в Macrotask(через requestAnimationFrame) сделал свое дело
Это говнокод, я предупреждал

Upd. суть задачи в имитации setTimeout через цикл while без использования таймаутов с ненулевой задержкой