Before you get too deep into the discussion, there are a couple of things I would recommend doing:
1) Break up the work into multiple stories attached to this epic. I think there is a lot of work here, and it spans so much functionality that you could break it into smaller atomic units and tackle one problem at a time. Trying to tackle all these issues at once complicates both the implementation and the discussions around it.
2) I suggest taking a look at the donated OSEC code. In that application, we have dynamic layouts implemented in a fairly simple, but robust, way. Each tab is also its own page and the list of tabs is simply the list of pages that are associated with the user. This is simplistic for what we eventually want to support (spaces, etc) but it might be a good starting point