Bitcoin transactions always spend 100% of your coins, however they can have multiple outputs.
So to pay for something while still retaining the change, you can have one output going towards the merchant with the required amount and one output going straight back to your own wallet with the remaining coins. Only one fee is needed and everything is within one transaction.
You can also send the change to a new address instead, which is how single use wallets work. You generate a new wallet, send the change to the new wallet and replace usage of the old wallet with the new one.