SRS is really a transformation that is tied to the SMTP protocol.
I agree, SMTP would be a better place to transform the sender.
This could be addressed by making smtp_generic_maps more general, such that there are separate variants for envelope sender, envelope recipient, and likewise the message header addresses (perhaps with names like smtp_sender_envelope_generic_maps, etc.)
Extending smtp_generic_maps is nice, but won't help in this situation. A lookup table isn't sufficient to do the rewriting, we need a function like postfix_srs_forward (in analogy to verp_sender).
I don't quite understand the DSN problem. If the envelope recipient is a srs address, the message is most likely a bounce. Are there any cases where someone is interested in DSNs of bounces?
Does the SRS patch rewrite the headers as well as the envelope?
No, headers aren't touched in SRS.