I2C slave reply

When the master calls Wire.requestFrom(), that triggers the OnRequest event on the slave. You have registered requestEvent() as the event handler to be called.

void requestEvent()
{
loop();
}               // as expected by master

Calling loop() once is a silly thing to do. What you need to do, in this method, is wait for the stepper to get where it is going, then send the reply.

Use the AccelStepper::currentPosition() method to find where the stepper is. Compare that to where you told it to go. When they match, the stepper has finished moving.