Con InnoSetup fai tutto quello vuoi.
Prevede anche una sezione CODE, in cui puoi personalizzare via codice il comportamento del setup (leggere chiavi, verificare file, ecc.), e puoi anche crearti delle finestre personalizzate!

Unico neo: dato che InnoSetup è scritto in Delphi, per 'codificare' si usa il Pascal, ma non è difficile, basta imparare un po' la sintassi.

Vai sul sito e trovi tutto, e poi ci sono diversi progetti di esempio, oltre ovviamente al forum.