The exceptions provide gpl2 compatibility, gplv3 is already compatible with Apache 2.
As for why nobody did this before, i suspect the fsf wanted folks to move to gplv3, and neither side really wanted to do something like this. There are disadvantages to doing it like this, but it was felt this was the best we could really do.
Remember also that both those organizations have very different goals.