Зелёный квадрат подсвечивается сразу, потому что код в setTimeOut выполнится позже.
1) сначала подсвечивается красный квадрат
2) проходит цикл, setTimeOut уходит в web api
3) подсвечивается зелёный квадрат
4) стек освободился и теперь то что было в setTimeout начинает своё выполнение (гугли event loop, есть хорошие видео на эту тему)
Если хочешь чтобы зелёный квадрат подсветился в конце, можно внутри setTimeout отследить последний шаг итерации
https://codepen.io/LOL1/pen/dyPMGNz?editors=1010