This UI independence is the most important thing, actually (for me)
There's the 'Visual Basic' way of coding, where each control component will contain the business logic for the thing that happens when you press the button. I see this so often.
But better, is to have a module, or modules, that perform the business logic, interact with other web services, and have web2py call upon these module functions when UI interactions take place. In this way, you can build useful things using your business rules, from command line admin tools, to web apps using 'framework of the day', to desktop or mobile GUI apps in Kivy or anything else, and you're always leveraging your module code.
Example, I was working on a tool to interact with Amazon Web Services, cloudformation stack creation etc. Originally I built the app using pyqt, but then I switched to pyside, not a huge change there, but still. Then I built a new UI in kivy and deployed an android version. Finally the production version I built with web2py and it's there still. I could have used django at that point, or turbogears, or whatever (although I most like web2py for web development in python). Point is though, I didn't have to rewrite 80% of my code each time. Just the UI parts, and learning things like ajax reloading in web2py.
This was developing the entire app on a new platform.
If I'd started with web2py, and built and deployed the first version on that platform as you have done, then any mobile development would most likely have used web services exposed by my web2py app, and interacted with those. Seeing you already have a web2py app running, exposing some services you want to access via mobile seems like the way to do it to me.