Florian, die spans werden benötigt, um Inhalte ansprechen zu können. Etwa die Titel oder Fehlermeldungen. Außerdem werden umschließende spans innerhalb der labels verwendet, um möglichst unabhängig von paddings und bordern der Eingabefelder zu bleiben (den IEs muss noch ein bisschen mit JS nachgeholfen werden). Dieser Punkt ist übrigens noch nicht richtig rausgekommen im aktuellen Text, habe ich bemerkt: border und paddings, also im Grunde alle wesentlichen Styles, die für Eingabefelder benötigt werden, können beliebig gesetzt werden, ohne an der Grundstruktur des Formulars ansetzen zu müssen -- wie gesagt, bis auf den IE und das bisschen Javascript.
Zurück zu den spans: sie werden deshalb verwendet und als Blockelemente missbraucht, weil die umschließenden labels nur Inlineelemente vertragen. Und umschließende labels waren als Ausgangsbasis gewollt; sie sollten die eigentliche Struktur bilden, ohne dass dafür weitere divs herangezogen werden sollten.
Dein Gedanke mit Tabellenelementen war übrigens gut und sinnvoll, nur bleibt dabei - wie du bereits sagst - der IE auf der Strecke, deshalb musste bei unserem Formular ein anderer Ansatz her.