Давайте по порядку. Асинхронная функция -- такая функция, которая сразу передаёт управление вызвавшему её коду, но продолжает в это время что-то делать и результат своей работы сообщает позже. Разумеется, продолжает что-то делать она в другом потоке, но этот другой поток реализован или на уровне платформы (XMLHttpRequest в браузере), или на уровне ОС (i/o в NodeJS). Сам JavaScript при этом остаётся однопоточным.
В случае использования setTimeout второй поток не нужен. Функция ничего не делает, пока ждёт запуска переданной в setTimeout функции, а ничего не делать можно и в одном потоке