Even if you don't buy this argument (that the registrar/host will actively make your life difficult when you want to switch service providers), a more underlying reason you should not host your domain with your hosting provider is that it means that if they go offline you are screwed and have no options.

Contrary to what many people here seem to believe: your registrar is not a point of failure during normal operations. The only thing your registrar does is to allow you to renew your domain name and to change your DNS entries; this canonical data is not stored with them.

You do not need to do that every day: you don't even need to do that every year. If your registrar went offline, tomorrow, for months on end, the only way you'd ever notice (assuming your DNS provider didn't go offline) is that whois would not return detailed information for your domain.

However, if/when your DNS goes offline, you are hosed: anyone without a cached copy of your records (which in the end is a very large number of users, even with long cache times) no longer can access your website; they are truly a point of failure.

How do you fix that? Well, you go to your registrar, whom you hope is online that day, and you change your DNS servers to point to someone else. Your registrar is your backup: they are the people you need online only during on that rare day when your DNS is offline.

Now, if you take any DNS service out there, even the most reliable, it is going to be offline someday for some reason for at least some of your users: they may have multiple locations, but today the east coast got destroyed by a hurricane, and all of your users in the relatively safe state of KY are still being forwarded to NJ? Well, maybe you want to fix that.

Having a registrar that is not your DNS provider means that there is now some chance that you can do that. When the DNS service is working, the registrar doesn't cause you any issues: if it goes offline you aren't even going to notice.

Yes, there's some astronomical chance that the registrar does something insane, like has a glitch that deletes your domain name from the root servers... but frankly, that kind of glitch is going to be uncorrelated from outages and might happen no matter where you host it: the registrar is your one truly infrastructure-mandated single thing you have to trust to not do things that are insane (but thankfully don't have to trust are online).

This "trust not to do something insane" is then then how you need to choose your registrar, and it is not how you probably choose anything else in your stack. This is much more of a legal than a technical issue, as pointed out by one of the only other comments on this thread that seems to understand this (the short one by troels).

However, having your DNS (along with whatever else: HTTP, database, anything else you may use; none of this is important: DNS is king) at the same place as your registrar is just a death sentence for reliability. You've even given up your option to just point the domain at a "sorry, we are offline, please try again tomorrow" page.

I now will point out (again[1]), that this is basic prerequisite knowledge for running a website. Before you spend time deciding things like "Ruby or Clojure", "HBase or PostgreSQL", and "Linode or AWS", you should learn how websites are put together, what DNS is, and what a registrar's purpose in the ecosystem really is.

[1] http://news.ycombinator.com/item?id=4502451

As much as I like to think some of these other decisions can be critical to your ability to pivot later, if you don't know how a website works in the first place well enough to notice at a glance "oh, if I host my registrar and DNS in the same place I'm screwed in the case of a single outage" you have much more serious problems, and you aren't going to be able to make informed decisions anyway.

Truly, in the end, you can build a fine website using PHP, MongoDB, and hosted on a single machine in your janitorial closet; if nothing else, when it inevitably fails, you will be able to quickly migrate your DNS entries to a page saying "we are sorry we are offline: we used bad technology". ;P