Well, Fabric itself pure Python and fabfiles are Python but yes, it's mainly making shell commands. I find that a lot better since that's usually how documentation shows a lot of these things. You don't end up doing anything too crazy. Just a lot of cd, cp, mv, hg, rm, chown, etc.
Yes, you can set the web2py version via Mercurial's "hg update [version]" command. [version] can be a label or a changeset hash.