Multiple Wire.OnRequest handlers

I hope I have interpreted your question correctly....

One of my projects requires different information to be sent/received from arduino to arduino, and what I did was basically how you have indicated.

Wire.beginTransmission(Address);
Wire.send(Command);
Wire.endTransmission();
Wire.requestFrom(Address, 1);      // request 1 bytes from slave device

So basically you send a 'Command' from the Master to the Slave, and then you request data from it. In the Slave you save the command that you received, and then when the request for data comes in, you send the information based on what the command was.

If that makes sense.

So in the slave, in simple terms, I do this:

void setup()
{
  Wire.begin(Address);    //Slaves Address
  Wire.onRequest(requestEvent);
  Wire.onReceive(receiveEvent);
}

void loop()
{
   //calculate stuff
}

void receiveEvent(int HowMany)
{
   if(Wire.available() > 0)
   {
      CMD = Wire.receive();
   }
}

void requestEvent()
{
  if(CMD == 0x01)
  {
    //Send Stuff
  }
  if(CMD == 0x02)
  {
    //Send other Stuff
  }
}

Hope you get the idea.
Thats how I have done it anyway and it works well.

James