As said, only retaining the state of a single canister as opposed to the whole subnet’s is not something that’s supported yet. I believe it is technically possible, but it would likely take time and effort to design and implement.
Also, IMHO one would have to significantly rate limit long-running queries because, as opposed to the average web server that can handle hundreds of concurrent requests, we impose a hard limit (4? 10?) on the number of concurrent queries doe to (I believe) each of them requiring its own canister sandbox process (whereas the average web server may not even need separate threads for each concurrent request it handles).
Regarding composite queries having a consistent snapshot of the subnet state, this is for better or worse the case now: if the user queries canister A, who queries canister B, who queries canister C, all three canisters’ states will be from the same block height. I don’t thing that’s necessary; it may not even be desirable; but as with everything, applications may already rely on this property.
I will admit that this last one is a weak argument. But he first two (and who knows what others, as said, I’m just an interested observer, not a member of the Execution or Runtime teams) are annoyingly solid.