Hi Kevin,
If its a sync call from the other app, then I’d suggest to do this with response codes – they will be sent out even in cases of Bad responses and I think that’s much more universal and gives options on the calling application to handle errors gracefully.
I’m not quite sure why email would be required to capture Bad requests errors as the consuming application has not followed proper usage and passed expected input parameters, this means more of an error at the consuming side rather than the publishing side. But as you mentioned that if its a Bad request then it does not call the microflow, I don’t think that there is other way apart from sending response codes.
Hope it helps!