Hi David,
I think you've done the best thing by starting with hand coding your sites. I started that way and because of it, I understand what's going on "under the hood" of the websites I work on. That experience in invaluable.
The reason I use a CMS for my client's websites now is because it puts them in control (somewhat) and lets them edit their own text, images, and products. Websites should constantly be revised, improved, edited, etc. and as a work-at-home mom with 3 kids and several clients, I simply don't have the time to edit everyone's websites. I wouldn't get anything else done! So, I develop client sites in WordPress or CMS Made Simple and it really is great to let my clients take care of daily updates while still depending upon me for major updates.
While it's true that some templates out there don't have good code, that doesn't mean you have to settle for that. Both WordPress and CMS Made Simple (and others) allow you to code your own HTML template and CSS. I still hand code everything, but now I integrate my custom designed templates with a CMS to enhance them.
I hope this makes sense.
Edit to add: A lot of times, if you run across a WordPress powered website that has validation errors, those errors may not be caused by the HTML/CSS, rather they are caused by 3rd party add-ons (plugins, modules, etc). Sometimes those things just can't be helped.