You are correct that one way of doing it would be to use hidden fields to propagate your variables.
Have you considered using sessions to achieve the same result?
if you have a text field called "ffName"
you can store it in $sesArrFormData["ffName"]
then you can process all the data stored in the session at the end of the wizard.
after every form submission using code like
session_start();
session_register("sesArrFormData");
foreach ($HTTP_SESSION_VARS as $strKey => $strValue)
{
$sesArrFormData[$strKey] = $strValue;
}
.....
and so on
p.