Фича таймаутов в том что браузер замедляет их работу в неактивных вкладках для экономии ресурсов. До 1 раза в секунду если мне не изменяет память.
Соответственно ваша задача не создавать кучу интервалов и ждать как они отработают.
А создать start_timestamp и пачку breakpoint_timestamp(s). А потом запустить простейший setInterval и раз в секунду проверять разницу между текущем временем, стартовым временем и брейкпоинтами.