Lord, this is some crazy, boring, overly complex, useless crap.
Too many times (and this is one of them) software people confuse "flexibility" with "easy to use". Reusability is a dangerous game. You can engineer software so that it can be reused anywhere, but that tends to require a lot of external support for common tasks. Over engineer it, and it becomes just as difficult to implement as it would have been to have it too tightly coupled.
Lord help you if a single piece of any of that is out of synch.
We spent the entire first day just trying to get our development environments to at least run. It's all open source stuff, but we require something like 100 plug ins to just get anything on screen.
Flexible? I guess. But the man hours required to maintain the flexibility are unfathomable.