Storing permanent value in Form while in validation handler
$form_state['storage'] is probably what you're looking for. I've used it on multi-step forms myself to preserve necessary data that I need during various stages of the form processing. As an example you can define a storage variable like this:

$form_state['storage']['mykey'] = 'myval';


Edit:
Considering the additional information you provided it is indeed not quite as simple in your specific case. Setting $form_state['rebuild'] = TRUE; in the form validation handler also means that the user set form values will be lost. So what I think you could do is the following:

In the form validation handler function:

if (!isset($form_state['storage']['mykey'])) {
  $form_state['storage']['mykey'] = 'myval';
  // Save all the user set form values.
  foreach ($form_state['values'] as $key =&gt; $val) {
    // If you want to skip some values do it here.
    $form_state['storage']['values'][$key] = $val;
  }
  $form_state['rebuild'] = TRUE;
  drupal_set_message('Press submit again to confirm');
}


In your form builder function use the stored values as defaults. Example:

$form['key_1'] = array(
    '#type' =&gt; 'radios',
    '#title' =&gt; t('Title'),
    '#options' =&gt; array(0,1,2),
    '#default_value' =&gt; $form_state['storage']['values']['key_1'],
);


Not sure how well the example code fits your needs, but it should get you started or at least give further ideas/options to try out.