You loop over STEPS but keep overwriting "form" on each iteration, so at the end of the loop, "form" is just the form associated with the last step.
Anyway, if you want all the steps on a single HTML page, don't do it this way (SQLFORM.factory will generate a separate form for each step, which you do not want). Just create a single form with multiple fieldsets, and show/hide the fieldsets as you go from step to step (this is what jQuery Steps does). You will have to create custom form markup in the template (or create a custom formstyle function), as the built-in formstyles for SQLFORM will not generate the HTML markup you need.
In short, in the web2py controller, just create a single standard SQLFORM using all of the fields. Then in the view, generate markup like you see here:
http://www.jquery-steps.com/Examples#advanced-form. See
http://web2py.com/books/default/chapter/29/07/forms-and-validators#Custom-forms for details on generating the custom form markup.
Anthony