You're forgetting that Accept headers vary among clients — each non-bit-for-bit identical version will be cached separately. Vary:User-Agent takes that problem and raises it exponentially. You can play games trying to normalize things but that makes life hard using a CDN and increases the risk of buggy proxies creating very hard to diagnose problems.
The alternative of creating unique URLs is incredibly simple and has worked perfectly since the start of the web. Content negotiation is an interesting idea but it's just not worth the support cost.