Смотрите, сам .innerHTML выполняется синхронно, но проблема в том, что страничка ваша рендерится не одновременно с Вашим кодом. У браузеров есть такая штука как Pipeline, если хочется углубиться, то можно погуглить про Browser Event Loop. Кратко говоря, страница рендерится (вешаются стили, апдейтится разметка, происходят визуальные изменения) только после того, как отработает ваш код. Поэтому, если не заморачиваться, то можно просто заюзать setTimeout().
Ну смотрите, если Вам лучше пару месяцев сидеть и разрабатывать свой вариант, нежели заплатить за экономию времени и готовое решение, то пожалуйста, делайте :)
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.