Потому что вы пытаетесь анимировать только что созданный элемент, а с таймаутом это происходит уже на следующей итерации цикла обработки событий. Ну и, кстати, использовать таймер таким способом (там можно даже 0 написать, видимо) — вполне нормальный подход.