An expiration time on memory pool transactions would be a good idea for this and other reasons.
When a transaction is given up on, a new transaction back to the sender needs to be created using the same coins. Otherwise, the old transaction might eventually make it into a block, which would be undesirable. Given this, transaction replacement should be re-enabled so that this problem can be solved as intended: to cancel a transaction, you send a transaction back to yourself using the same inputs with lower sequence numbers, and all nodes update the transaction immediately.