The transaction fee is based on the byte size of the transaction, not the monetary amount, so in it's current form it doesn't make sense to use Bitcoin for low-value transactions.
Edit: I'm wrong, it's complicated.
Aren'y all bitcoin transaction really close to the same size? The amount being transferred doesn't change the size an integer contain 1 and another container 1,000,000,000 take the same amount of space (32 or 64 bits) because the spec says so.
I thought transaction fees encouraged miners to include your block in a transaction.
If you're paying for your £3 coffee by transfering small amounts from many addresses, it's a big transaction.
Address fragmentation happens when your coins are distributed across many addresses, and can be caused by things like spending coins, because all transactions actually spend everything at an address and just route the "change" elsewhere. Buy two cups of coffee too close to each other and your next transaction is going to cost twice as much in fees, whoops!
Unfortunately it's generally advised to use a new receiving address for every bitcoin transaction to make it harder to trace how much money you have and how you earn and spend it (most wallet craft a new address for every receive transaction) so it's very common to end up with your assets split up across dozens or even hundred of addresses.
Imagine two wallets each with a total of 1 BTC. One wallet just received a single transaction with 1 BTC and the other is funded with 10 transactions of 0.1 BTC. The wallet with 1 BTC as an input only needs that single proof to send the whole BTC, while the wallet with 10 0.1 BTC inputs needs to submit all of those proofs to transfer the 1 BTC, effectively 10x the data.