For that reason, things can be signed with SIGHASH_ALL | SIGHASH_ANYONECANPAY. Then, all outputs will be protected, but more inputs could be added by anyone, to bump fees, when needed.
The goal of
free relay is to keep the transaction in mempool and never get included in a block. It can be used by an attacker to waste bandwidth, memory etc. for nodes in the p2p network.
SIGHASH_ALL | SIGHASH_ANYONECANPAY isn't used by a lot of transactions. Although it has some use cases and joinstr(coinjoin cimplementation) uses this sighash flag.