First, build clean html templates with a strong approach on semantics, define a default css base which works well regardless of the theme chosen (basic element positions, basic images, font definitions, etc, etc.), and define your default theme in a separate file
Now there are two approaches:
Let them configure the look of some elements and store their preferences in the DB
http://acko.net/dev/farbtastic is a nice widget for choosing colors of elements
If you want to go further, f.ex. drag&drop element positions on the layout, use f.ex http://jqueryui.com/ (or scriptcaluous or some other) and save their positions to db via httprequest on drop
Let them write their css file
If you'd like the approach of user writing a css file, I'd consider letting them override only specific classes of elements, but I don't know what you really want to achieve and how far you want to go with the theming, provide more details. I don't see why would they upload the css onto disk, simply put them in a textarea and save to the database.
Regardles of the way you choose, you should check how it works on http://tumblr.com or http://storytlr.com to get an idea on the subject.