I just finished implementing some cool features for customizing CiviCRM look and feel in v1.7. As most of you'll are aware CiviCRM follows a pretty good modular MVC (model-view-controller) architecture. We seperate the view (Smarty templates) from the code and business logic quite stringently and most of the display can be customized at the template level.
In 1.6 and prior, you had to hack the CiviCRM templates to make your changes. This is not very good from an upgrade perspective, since you need to reapply your changes on every upgrade. In v1.7 we've introduced a new path in the settings file. The user can store their customized templates there and it overrides the default CiviCRM templates. You dont need to override all the template files. You just change the files you want to, and the system uses the default files for the rest.