Il ciclo for lancia i setTimeout a pochi millesimi di secondo di distanza l'uno dall'altro, perciò l'impressione è che i div vengano spostati simultaneamente.
Una soluzione porebbe essere rendere ricorsiva la funzione "sposta":
codice:function sposta(n){ ... setTimeout("sposta(n)",1000); }