It could be handy features, but there are some problems such as :
1. It will make zero-confirmation impossible, especially zero-confirmation is very needed when you pay in store where merchant obviously can't wait 10 minutes.
2. I think develop your idea would be difficult since developer also have to think how to prevent double-spend or prevent rebroadcast transaction.
3. It could make conflict when miner mine a block after you broadcast "cancel TX" to bitcoin network while other nodes receive your broadcast before receive newest mined block which include your transaction.
CMIIW.