Когда secVal == 1000, условие истинно и вы заходите в него. Выставляете 1001-ый вызов timer = setTimeout(tick, 0);, вызываетесь, условие не срабатывает, а вот console.log(secVal); - да. Оно же за границами if-а.
Ну а какой результат вы ожидаете?
на 1000-ой итерации он выведет 1000 и добавит 1, на следующей он остановится, но значение secVal так и останется 1001.
Потому-что когда последний раз срабатывает условие: secVal <= 1000
secVal равно 1000
После вызова: secVal++
значение становится 1001
следующей строкой вы запускаете новый таймаут
затем выводите 1001 в консоль
после этого запускается колбек последнего таймаута
условие дает false, secVal не увеличивается и новый таймаут не вызывается
в консоль снова приходит 1001