I would like to say that your idea and implementation seems absolutely correct. A possible reason for mixing questions(data) and steps might be the following code:
label.Text = data[e.RadWizardStep.Index - 1].Question;
list.Items.Add(data[e.RadWizardStep.Index - 1].A);
list.Items.Add(data[e.RadWizardStep.Index - 1].B);
list.Items.Add(data[e.RadWizardStep.Index - 1].C);
Perhaps you can access the same index in the "data" collection as the step index ( not to subtract "1" from the e.WizardStep.Index). I believe such logic might lead to unexpected behavior.
As for second question - the WizardStepCreated
event is fired whe a step is changed in order to persist the controls within the steps. All dynamically created steps should be recreated on the server each time.