I am not sure how your custom setup is designed. If it uses a SelectionTree control, then it will have to be used after CostFinalize. I had assumed that you were using a different selection process, based on the entry in the UserRegistrationDlg.
In general, then, if you are using a ListBox control or a series of PushButtons or something of that nature, you can position your dialog display to occur *before* CostFinalize. I would use the selections to set a property or series of properties that would describe my installation options. I would use the properties to satisfy install section options defined in the Condition Table. The Condition Table is evaluated during the CostFinalize action.
As Stefan said, the user should be presented the opportunity to type in a Serial Number only once during the installation process. His suggestion was to hide the dialog that allows the user to enter the registration number. You can accomplish this by making sure that the Back button on the dialog that *follows* the registration dialog points to the dialog that appears *before* the registration dialog.
To ensure that the client can only see the registration dialog *once* going forward, you can set a property value on the control event from the Next button on the registration dialog. The next time the user attempts to get to the registration dialog from the previous dialog, you can test the value of the property set the first time through the loop and skip the registration dialog.
This would be much easier to explain on a white board. Please send me an email if you would like to discuss the problem in greater detail.