У тебя условия только на клики, двойного нет.
Проблема в непонимании Евентов
transition
у тебя длится 1s, а потом now
инкрементируется внутри setTimeout
При следующих нажатиях срабатывает if(!boxes[now + 1]) return
В кратце пользователь должен ждать секунду, чтобы заново нажать на новый цвет
Можешь в эту секунду блокировать кнопку и все сработает как должно
Что улучшить?
Именование переменных
Вложеность
Табуляция
Алгоритм (держать обычный счетчик в js и менять цвет только через название класса)