I agree it's a shame they use the towel charge, but if they didn't, I think you'd see a LOT more towels left in ports. And, it does take up crew time to gather towels left around the ship (which you'd also have a lot more of if there was no charge).
So, how do you, as a company, fix this?
1) Use scanners with sea passes?
2) Use a "card" system (every cruiser is given a card. Turn in the card, get a towel. Turn in a towel, either get a card or a new towel. At the end of the cruise, turn in the cards and no charge. Missing a card? Charge.)
3) Don't do anything and write off the labor charges and replacement towel costs?
4) Don't do anything and increase fees to make up for the added labor and replacement towel costs?