Из-за чего проблема с последовательностью событий в js?
Вы стали свидетелем одной из оптимизаций современных браузеров.

http://jsbin.com/OBaMoqe/1 - в комментариях пометил основную суть, но повторюсь

когда вам нужно выполнить что-то жирное, вы непременно должны вынести это дело из общего контекста выполнения (через setTimeout или предпочтительнее webworkers), иначе остальной код и все события по перерисовке будут ожидать окончания работы этой жирной логики.

js - асинхронный язык. Вся соль языка в том, что все тяжелые вычисления можно и нужно проводить паралельно.
Не уверен, но, быть может действительно манипуляции с DOM выполнятся по завершению всей функции click(). Если это так, то поведение очень странное.