The last mile is very local, limited to a single cell, whose size depends on the planned capacity (cells are smaller in cities). Congestion is therefore limited to specific cells. Furthermore, congestion is often very temporary, limited to peak hours or special events. A congestion event could last just minutes.
A global monthly data cap doesn't actually address congestion very well. You can still have a sudden influx of users with available quota overload a cell, meaning they aren't getting the service they paid for as they are getting degraded speeds. On the other hand, someone who used up all their monthly quota is still getting no or degraded service (or is charged overage fees) despite being on a cell with lots of available capacity - in this case both energy and spectrum is wasted because there is an idle cell that's not being used to its full capacity despite there being demand for it.
> soft caps
Soft caps are, at least in some carriers, either non-existent (you get a hard block or are charged insane overage fees) or are throttled to near-unusable speeds. Furthermore, even if soft caps are implemented, they are still global (and reset monthly) as opposed to being limited to congested areas.
The real reason for data caps isn't network congestion but to scare people into paying for more than they really need (which conveniently resets every month, so they can't accumulate their allowance either) and/or charge them huge overage fees if they dare exceed their allowance. If this was purely about congestion control and efficient spectrum usage, there are better ways such as the one I described in my original comment.
Unfortunately in an oligopoly controlled by a handful of equally-mediocre players who have no incentive (nor capability - there is no engineering culture to enable innovation) to compete with each other, there is no feasible way to fix this.