First off, you don't "buy" a domain name, you "register" it. (Unless you are actually purchasing an already-registered domain name, in which case you would be paying the registrant a fee to transfer it to you.)
moniker.com Better customer service than GoDaddy, great features if you need to manage multiple domains: a "professional" domain registrar.
DON'T register a domain name through your web host!
DON'T transfer domain names to your web host!
DON'T let a website designer register a domain name for you!
These are all good ways to lose your domain through either shady practices or negligence on your own part.
Yes, it is often "free" to register through your web host. But it's best to keep your registration at a registrar independent of your web host.
I think you must be mistaken about the bit about not being able to advertise if you register a domain name through Wordpress. Here's what their terms of service say:
Advertisements. Automattic reserves the right to display advertisements on your blog unless you have purchased an Ad-free Upgrade or a VIP Services account.
And this:
Adsense, Yahoo, Chitika, TextLinkAds and other ads are not allowed on free WordPress.com blogs. If you would like to run ads on your blog, one of these options may work for you:
Does Wordpress even do domain registrations? Perhaps you are thinking of a subdomain: e.g. mysite.wordpress.com. Anyway, the "advertising" policy seems based on what kind of account you choose, not anything about domain registration. Makes perfect sense that they wouldn't want bloggers selling advertising space on free blogs, since this is how they make most of their money - selling ad space on your free blog.
Hosting != domain registration.
Hosting != domain registration.
Hosting != domain registration.
Sure, search for another hosting option if you don't like the ad policy and/or don't want to upgrade to a paid account. But this really doesn't have anything to do with your domain registration options.