I think lens[1] is a good example of a package that uses both major numbers effectively. The second number is bumped each time there is a backwards-incompatible change, and the first number is bumped each time there is a *major* organizational change in the library. (It's up to 4 now.)
To me, this approach makes sense because not all breaking changes are the same. Sometimes you just want to tweak a single call for whatever reason (maybe security), and sometimes you want to reogranize the whole package, move around major modules... etc. Putting both kinds of changes behind the same version number seems a bit awkward.