I am happy to report having a positive experience with SharePoint programming.
I agree that the out-of-the box masterpages and css are pretty bad, and the here and there lack of documentation in the API can be very frustrating at sometimes, but these are minor setbacks if you see SharePoint as a development framework instead as a finite product which can be customized. I have read someone at MS describing the SharePoint as "modeling clay", with the out-of-the-box templates merely as "demos" of what can be achieved.
I find it quite easy and straightforward to build a custom master page (with the proper Doc Type in the header to remove the awful BackCompat and enable CSS1Compat, for example) or have my aspx pages with code-behind or whatever. Bottom line is - whatever you can do within a website in pure asp.net 2.0, you can do the same with SharePoint and benefit from its scalability, deployment techniques, API, permission model, audits, document storage system, InfoPath integration, workflows, etc.
I guess that in the end it really depends on your point of view: is SharePoint a development platform with a "demo" collection of site templates, or just a semi-finite product which allows you to customize it here and there?