I think the reason why people hate caps is because there is nonobvious how much data you have used or even are currently using at any moment. Sure you can typically log in and discover how much you have used but that workflow is well beyond what the average consumer is willing to do, even if they are technologically aware enough to know to do so.
This, combined with borderline draconian pricing schemes, makes for horror stories where someone had a $30/month plan and they end up getting charged $300 for using 2x their rate.
When you decide to use your hair dryer, you don't have to wonder if it's going to cost you $0.15 or $15.00. Electricity or water utilities are billed generally flat per-usage, the pricing schemes that come with bandwidth caps are not. So you paid $30 for X amount of data, which should indicate that the cost per data is $30/X, but if you use Y amount of data you have no idea what the price of it will be; it depends on your historical usage (and that of your teenage kid or neighbor who was on your open wifi or ...)
Bandwidth caps are a perfectly reasonable concept; higher usage actually does cost the company more to provide. But it is simply not the case that sending 1000 texts costs the company $10 but sending 2000 texts costs the company $100. It seems extremely likely to me that the plans are deliberately obtuse so that they can fleece customers of their money without any way of the user knowing until very far after the fact.
ISPs easily could redirect users to a page that says "You have used your quota for the month, would you like to continue at our per-byte rate of XXXX?" and block all their traffic until the user sees the page in the browser and click yes. I'm fairly certain that anyone who actually uses a capped plan would greatly prefer having the choice. They do not do this because they don't actually care about overages, they are being underhanded to trick people into using an expensive service without their knowledge.