I recently added different installation types (Install, Update, Repair) to my InnoSetup. It all workes pretty fine.
[Types]
Name: Install; Description: \"Ins
A tidy solution for this would be to use CreateInputOptionPage to create a separate page with radiobuttons prior to the component selection page. (There's an example for this in the CodeDlg.iss script.)
An even tidier option is to not ask at all, since it's entirely unnecessary. You can automatically detect the version that's already installed -- if it's not installed, it's an Install, if it's installed but older, it's an Upgrade, if it's installed and the same version, then it's a Repair, and finally if it's installed but newer then it's a Downgrade -- which you may want to either disallow (safer) or permit but display a warning (more convenient, if it's likely that people might want to downgrade).