User-level configuration of custom software has always been a pain to implement. Traditionally, as a database specialist, I've used databases for this: but there are drawbacks and although I've tried XML, it doesn't seem to solve them.
There's a very interesting article from Martin Fowler on domain-specific languages (DSLs) which has been kicking around for 2 years and I think that he makes some good points.
As he reminds us, COBOL was intended to be a user-level programming tool which would make developers redundant (and so, for that matter, were SQL and Microsoft Access); but not only did they fail to do so, they also spawned new groups of programming specialists.
My problem in having table-driven configuration has always been selling the time and effort needed to write the configuration manager. You can't just give users raw access to the table unless they are very clued-up.
XML looks so easy to programmers (and to parser developers) that it is tempting to use this for configuration - but in my experience users just don't get it.
I think the future for configuration lies in the direction of what Fowler refers to as Unix-style "little languages". These may still not be simple enough for users to write the configuration themselves, but they may be simple enough to allow it to be reviewed by them.
Microsoft have also waded into this with a set of tools for Visual Studio, but, like SQL Reporting Services and SSIS, the VS2005 interface is too heavy, unintuitive and buggy to be given to users (and programmers too, really, but there's no real alternative at the moment).
Any tool for allowing users to change configurations in this way needs, in my opinion, to implement versioning and previewing, and these are two of the most difficult things to do well.