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);
}