setTimeout принимает переданную ей функцию js и регистрирует обратный вызов выполнения в API обратного вызова браузера. Затем этот API обратного вызова помещает его в очередь задач, а затем очередь выполнения проверяет наличие задач в очереди задач и выполняет их по порядку.
JavaScript имеет странный цикл выполнения, который Филипп Робертс отлично выполняет, иллюстрируя в своем JS talk . Очередь до 12 минут для части по вашему вопросу.