Re CSS, I will note that the history of the web is one of always being backward crappy compatible which of course has caused an infinite number of headaches and bad design, but it is also how we got ubiquity which is the main point about the browser.
I don't know enough about CSS to know whether it makes the designers (and marketing and sales and executive staff) that want 100% control of layout happy. If not, it will never completely replace tables and other HTML hacks. This is why I mostly ignore semantic web stuff which hasn't gotten much more popular in the last ten years even though the same arguments were made for semantics over style oh so long ago.
Semantic web stuff generated from database queries is easy and good. There isn't much reason not to unless you are trying to protect your content copyright, which is a big deal for companies, so it is probably in their best interest to force the content abusers to also be screen scrapers.
Users creating arbitrary styled text and trying to impose semantics is difficult to impossible. Technically possible should never be confused with reality. ;-) Obviously, it is perfectly okay to use CSS and should be encouraged in many situations. Whether it reduces your potential viewing audience or increases it is an issue for the site owner and whether they care.
My own preference is to never see XML, HTML or CSS. If I have to type actual HTML myself, I use incredibly simplistic tags that have been around forever. If I'm coding a web-oriented solution, then I let a designer build the template parts and I never see that ugly stuff and I'm happy. If I was building a big site like City.Net again (10,000 pages), all the templating and site generation infrastructure would hide the underlying solution.
If the writer or editor or non-techy that creates content has to deal with any of the underlying XML, HTML, CSS, whatever junk, then you have a crappy content management system that doesn't work in the real world. If you can hide it and it meets the users needs, which is what Radio or other blog apps should do if they want dumb users to be able to deal with it, then again CSS is fine. Users do assume that their content works everywhere, so it would be good to be clear about what users/browsers they lose as an audience based on which underlying tech solution is chosen.