Okay, you are right, in this situation you have to keep the SCL low for a while (even if it is against the rules of the universe ).
When leaving the onRequest handler, the Wire library returns the data and releases the SCL pin.
It is possible to force the SCL low with another pin, but then the Wire library gets confused. I think the bus collision detection will trigger.
The Wire library can indeed not do what you want.
Changing the source of the Wire library is far too difficult. This is the low level I2C code for the mega-avr branch: twi.c.
There are other Wire libraries, even a few with Slave mode. But they are for the avr microcontrollers and not for the newer mega-avr microcontrollers. Those with Slave mode operate all in the same way as the Arduino Wire library, with the onRequest handler in a interrupt and also those are far too complex to change it.
Here are a few mentioned: Alternatives to Wire library for I2C.
This is my Overview of Arduino I2C libraries. As you can see the "SoftIIC" can do Slave mode in software (no interrupt), but it has restrictions. I took a look at the code, but I'm afraid I can not help to change it for your situation.
You might have more luck outside the Arduino family. For example with a ESP8266 board, or an other platform.
I can see no other option, then that you have all the information which could be requested ready.
Can you tell what kind of information you need to gather and how ?