Can someone explain why do the mempools have to keep those unconfirmed transactions for so long?
Nodes don't have to keep transactions in their mempool. Each node can have its own settings. There are many nodes that use default settings and drop unconfirmed transactions from their mempool after 14 days.
Also why does mycelium force rebroadcast when the right solution is not to rebroadcast (or at least let the user choose)
That's how it has been designed.
I think if you don't open your wallet, mycelium will no longer rebroadcast your transaction.