What about the ability to look at API responses in a browser? You can't normally change the request headers a browser sends without some type of plugin.
Including the version number in the URL gets around this and even allows you to test API responses in mobile browsers if needed.
Although I tend to agree that a header-based approach is cleaner and more in the spirit of REST and even HTTP.
Well, I think the way you do it is provide examples of interaction that sends an explicit Accept with client interactions. Detecting Content-type and reacting accordingly is only for totally blind discovery.
It's like this:
--> GET /api/ Accept: application/json
<-- Content-type: application/vnd.api.v1+json <stuff>
Then your consumers can know what version of the API they're interacting with and act accordingly.