Well first off. You want to separate the gui from form data processing. By separating the gui you can "drop in" different interfaces on the fly even within the same OS and not have to worry about messing with the data processing logic (aka business logic).
Why would you want to or need to do this? I guess, I'm not following what you want to do. Building a menu dynamically is easily implemented as a file or db table with an item number, menu name, quick key, interface type, parent item, menu position, and maybe access level or/and other features. I just rewrote somebody's menu routine and increased the speed of generation from 30+ seconds to less than 5, so performance hits can get quite large if you're not careful. Of course the 5 second menu building might seem slow, but remember in order to build the menu tree you have to traverse the entire tree. I could improve this even more by completely rewriting the code using a b-tree type algorithm, but that would require redesigning the existing table also. Something they didn't want to do and 5 seconds is acceptable in this instance. As it is, I am mimicking a b-tree as best as possible based on the data source. So you see the design of the back-end data structure is very important.
Ah, yes ... I've dealt with clients like this.