My first guess would be you, if you haven't already, is to integrate the form with AJAX, so when you Click Submit to continue to the next page, it will also trigger an AJAX event, which still store the field variable information based of your custom Submit Handler function.
Here is a snippet from the Advanced Form Block Module, which provides AJAX for Node creation.
$form['#after_build'][] = 'afb_after_build';
$rand = rand();
$form['actions']['submit'] = FALSE;
$form['actions']['preview'] = FALSE;
$form['actions']['delete'] = FALSE;
$form['changed']['#default_value'] = time() + 300;
$form['#id'] = !empty($form['#node']->form_id) ? $form['#node']->form_id : $form['#id'];
$form['ajax-submit'] = array(
'#type' => 'submit',
'#value' => t('Save Node'),
'#weight' => 50,
'#id' => 'ajax-submit-random-' . $rand,
'#ajax' => array(
'wrapper' => !empty($form['#node']->form_id) ? $form['#node']->form_id : $form['#id'],
'callback' => 'afb_ajax_handler',
'effect' => 'fade',
),
'#submit' =>
array(
1 => 'node_form_submit',
),
);
It calls a function to Save the fields, without refreshing the page...
/**
* Ajax Handler that returns the forms in each individual blocks.
*/
function afb_ajax_handler($form, $form_state) {
if (isset($form['#node']->nid)) {
$id = $form['#id'];
module_load_include('inc', 'node', 'node.pages');
$node = node_load($form['#node']->nid);
$form_state['build_info']['args'][0]->form_id = $id;
$form = drupal_rebuild_form($node->type . '_node_form', $form_state, $form);
$form['#id'] = $id;
return $form;
}
else {
$node = $form_state['node'];
if (!empty($node->nid)) {
$id = $form['#id'];
$new_node = (object) array(
'uid' => $node->uid,
'name' => $node->name,
'type' => $node->type,
'language' => $node->language,
'ajax_form' => 1,
'delta' => $node->delta,
'form_id' => $id,
);
$new_form_state = array();
$new_form_state['build_info']['args'] = array($new_node);
$new_form_state['values'] = array();
$new_form_state['method'] = $form_state['method'];
form_load_include($new_form_state, 'inc', 'node', 'node.pages');
$form = drupal_rebuild_form($node->type . '_node_form', $new_form_state);
$form['#id'] = $id;
return $form;
}
else {
return $form;
}
}
}
That being said, that is not a direct answer to your question, because without knowing the fields you are storing I can't really help you write a module, but this should give you a basic example of what "should" be done.
I think you might be able to get away without worrying about a wrapper, because you are storing data, but I could be wrong on this.