I feel like the solution is not necessarily to make one app do it all, but to embrace something more akin to a client-server architecture - one "app" with multiple UIs talking over the same API to the same backend logic.
Decoupling the UI from the business logic is not exactly a new concept.