I would add a third, dedicated loop to the emergency stop, or lock.
This way, when the user tries to start the second loop (by making the appropriate actions such that the code will take them there), the abort will always be available, since it will not be tied into an event.
Now, whenever an abort condition is reached, the third loop will catch it, and you can use queues or some other form of loop communication to ensure all code stops and reverts to the default state.
I would however, recommend against an event structure in your B loop, unless it is absolutely necessary. Wouldn't it be easier to use a state machine?