There are many ways to change the content and/or structure of an app. One app I worked on was essentially a fancy JSON parser- you could specify what view controllers to put where and what to put (some UIKit objects) in their views. Another app had a fixed structure but dynamic content (again, specified by a JSON file) that was downloaded regularly to keep the content up to date.
On iOS you can use method swizzling. I wrote up a blog post about a year ago[1], describing some of these methods for a similar-ish concept we built at a hackathon.