You are correct. In fact, charging per sent/received byte of data could fix a number of economical and technical problems in the network.
First, there is this problem of flat rates. For some reason, people seem to like them (is it because they are predictable?), but I don't see any logic behind this. Everyone hates prepaying parking some extra minutes to be safe, leaving earlier, and regretting wasted money. I don't see why this should be different with Internet plans. People who use the Internet to check emails and surf text web would not have to pay for the minimum plan (at least $40/mo). Of course, that would mean less profit for ISPs, which is why per-byte pricing is not popular.
Second, this will solve technical problem of flow fairness. The whole reason why "download accelerators" and (partially) p2p programs exist is because TCP fairness is inherently broken, as you can increase your speed on a congested link simply by opening more connections. Charging per byte would tie all flows to an economic entity, ensuring perfect fairness (you pay more -> you get bigger share of a congested link).
Third, pricing can be dynamic ("congestion pricing"). We can borrow ideas from power companies that charge (typically industrial/commercial) users less per KWh in off-peak hours when the network is underutilized, and similarly charge more during peak hours. While this works the best between end user and their ISP, it could be extended to relationships between ISPs.
Fourth, end users could have more control over prioritizing their traffic with respect to their own and other users' traffic. Suppose the network is congested, and I am willing to pay more to get my VoIP traffic delivered on time, but I don't care as much for p2p traffic (it can be delayed/rescheduled so I can save money).
In fact, this is something I'm working on as a mini-research project, so it would be interesting if it worked in reality.