Businesses that work on 'metered' entities (phone companies, banks and so on) as a rule have velocity checks in place.
This limits the amount of damage a customer can do to himself and to the company between billing periods.
I think Heroku is the party here that stands to benefit the most from the encounter, and by simply charging the customer they've lost an opportunity for good PR and have made half of HN more wary of dealing with them.
I understand what you're getting at, but just like there is a maturity to being 'in business' there is a maturity in dealing with your customers, and in this case both parties carry part of the blame, so the reasonable thing to do is to find a solution that lies in the middle.
Even the pros mess up occasionally, and in this case it was pretty clear that it was a mistake.
The real lesson here is that Heroku should implement a notification system when a customer has excess unused capacity or a min/max setting for their dynos with automatic increase and decrease depending on the amount of traffic a customer is currently receiving.
As you say, you 'do this all the time', so that means that you know exactly what is in your interest as a business person, and if that means that you occasionally eat a charge that must mean that you know exactly what the value of goodwill is.
Heroku, apparently has not yet learned that lesson, and 'heroku' and 'unexpected large bill due to mistake' are now two concepts that have become strongly linked. It did not need to be that way.