Hmmm... So this means that app-specific routes are not so useful as I thought. I thought I would be able to get away without the "web2py/routes.py" having all rules defined per application. In other words, I was expecting the default_router to be the default when there is no "web2py/routes.py". But I guess this could break backward compatibility and that's why it was decided against it. It's a pity because with the default router it would be trivial to demonstrate the app-specific routes in examples or welcome app without altering the user defined routes for other apps on version upgrade.
Without the default router turned on, defining routes inside application folders makes little sense. It doesn't bring much of the portability as the "global" file is still needed. It is actually easier do to what you suggest, that is define everything in "web2py/routes.py". And that's quite disappointing as I really liked the elegance of self-contained apps. I understand, however, that backward compatibility is more important. Thanks for the explanation.