Well the problem becomes a lot simpler if we would only ever allow a single media type in the Accept header. This might be a valid simplification. So clients cannot express that they support multiple versions. With content negotiation we would have ultimate flexibility in when the new API and the clients using the new API are released. Clients could go to production supporting a future API version (then again this seems not so likely in reality mainly because then they would not be able to validate their clients against a production server).
If we only support a single media type in the Accept header the logic inside varnish becomes a lot simpler but we would still need some mapping to realize that for parts of the API f.e. v1.1 is the same as v1.0 and therefore there is no need to cache two different versions. But here again we could simplify our life if we simply define that older versions are phased out rather quickly, so that we would at most store 2 duplicates per resource.
Anyway, I do not think that anything would be easier with RPC.