Sorry to jump into this thread at a random point.
There's another aspect to this discussion that hasn't been brought up. Imagine that I release a package bar-1.0.0.0, that depends on:
build-depends: base, foo >= 1.1
Then, suppose foo-1.2 is released and bar-1.0.0.0 is incompatible. If you simply release a new version of bar with a stricter upper bound, cabal may decide to install the original bar-1.0.0.0 together with foo-1.2, which will lead to a broken build. Blackling the package is the theoretical solution to this problem, but may not work correctly[1]. However, by overwriting the original cabal file with a tweaked one, cabal will be able to make a more sensible decision.
I'm not trying to advocate anything in particular here, just point out an aspect of the discussion that I think has been missed.