Well, for example, Bundle::CPAN ignores the Makefile.PL.
Instead, it reads the .pm file to look for specially formateed POD entries instead!
This means there's no capability to do platform-senstive Bundle:: modules. In fact, there's no capability to do ANY sort of interesting things.
You write it in the POD, hope you don't accidentally write something in the POD that the CPAN client will mistake for a module, and than pack it up with a Makefile.PL that does nothing.
Oh, and because Bundle:: modules are never installed, you can never tell whether a Bundle:: module has been installed of not.
They are completely invisible.
This can lead to some scenarios where you want a specific tarball version installed (not just a class) and because the Bundle:: doesn't know if it is installed, it just reinstalls the same package all over again.
If two modules both use the same Bundle:: in your recursion tree, well then it will install it TWICE!
Oh, and don't expect to be able to use them if you write your own CPAN client or installer, because you yourself have to implement the weirdness inside of them.
And you can't install a Bundle module by hand with Makefile.PL... well you can, except it will lie to you, because only what's in the POD matters, not what's in the Makefile.PL, so you have to maintain the dep list twice.
This is all from a Bundle author perspective, and I understand that part. But where do I start caring, as a user? All I have to do is type cpan Bundle::Foo or cpan Task::Foo and there is no difference to me as a user.