Without digging so much in the contract design, I had a similar idea in: Reducing the verification cost of a SNARK through hierarchical aggregation.
I am really interested in those questions and I also think that using registry contract for proofs and verification keys are the best way to benefits from efficient multi-verification as you described in your.
However, I have a few comments,
In case you are using proof composition (SNARKs or STARKs) or using mpc batchproof construction (Bulletproof), you can even optimize the storage by only requiring the user application to store a Hash of the proof that was batch verified. But then you need a third party to compute the aggregate proof and post it on the registry contract.
Also, there is a point I am not sure I have understood correctly. In case you are using Groth16, Sonic (using you are the using the batch-verificication), what is the mechanism to trigger batch verification ?
It seems not trivial to me, because if you let user decide to trigger the batch verification (and be rewarded for that) then you have a Nash Equilibrium at the point (Cost of verifying a batch) - Reward == 0