in realtà le funzioni vengono concluse subito... dopo aver chiamato la setTimeout() questa apre un thread di flusso diverso e chiude l'esecuzione della funzione corrente.
scaduto il Timeout esegue la funzione...
la differenza fra questo metodo e la chiamata puramente ricorsiva sta nel fatto che questo metodo non ti rincoglionisce il browser perchè utilizza i thread... le chiamate ricorsive invece utilizzano lo stack e quindi possono persino darti la classica schermata blu..
spero di essermi spiegato bene
ciao