Interesting use case -- I think cases like that have come up before (i.e., where different roles need different types of profiles). May be worth supporting somehow, but not sure about the best approach.
For now, you might consider putting all the profile fields in the auth_user table, and just selectively make some readable/writable depending on which registration/profile action is being used. Alternatively, you could create separate tables that are simply linked to the auth_user table. Either approach will require creating somewhat customized register and profile actions, but that shouldn't be too difficult, and other than that, I'm not sure there's much else to worry about.
If you want to use separate applications, they can share a database, though it's trickier to share model definitions (you could put them in modules and import, or use the auto-import method) -- for more, see
http://web2py.com/books/default/chapter/29/06#Using-DAL-without-define-tables. I'm not sure I would create separate apps just for the sake of this Auth issue, but if it makes sense otherwise to have separate apps, they can share databases.
Anthony