For small installs I'm with mouser. You can also download ISSkin, which is a free skin library for Inno Setups. Plus, esp. if you know Pascal, the built-in scripting language lets you do lots of stuff to customize things. For example, you can check the uninstall string for your application to know if it's already installed, offer to keep or delete registry settings when uninstalling etc..
One trick I used to like to include in my Tray applications was a small app killer that would check if the app is running, and if so, kill the app and then move the mouse over the Tray icons to get rid of the Tray Icon that hangs when an app is killed. So many times people have a Tray app that starts with Windows, they forget it's running, and when they uninstall it gets an error. This way I pass the name of the app to the app killer as part of the uninstall. The Tray app is killed before deletion is attempted.
Anyway, seemed pretty cool when I was doing it but more and more people just want to unzip as lanux128 said. I wouldn't get into any of the elaborate database driven installers unless you have a large app with lots of components or can afford a tool that does all the grunt work for you. The more moving parts the more stuff there is to break.