herokuはeclipseでプロジェクトを作るだけで公開されるのですごいと思います。
ただ新しい機能が使われており主にSpring関連の設定が逆に訳が分からなかったため確認してみました。
Spring MVC & Tomcat Applicationのテンプレートを確認しました。
ほとんどは以下のapplicationContext.xmlで分かりそうです。
https://github.com/heroku/template-java-spring-hibernate/blob/master/src/main/resources/applicationContext.xml
①ローカル環境とデプロイ環境でDBが違うのはどうやっている?
Spring3.1のBean Definition Profilesの機能を利用しているようです。
<beans profile="default">と<beans profile="prod">
でローカル環境とデプロイ環境で読み込むbeanを切り替えているようです。
Procfileでは-Dspring.profiles.active=prod とオプションが設定されているので
デプロイ時には<beans profile="prod">が読み込まれるのでしょう。
②テーブルを作っていないのにアプリケーションを動作させた際にテーブルができているのはどうやってる?
Hibernateのアプリケーション起動時に自動でテーブルを作成する機能を利用しているようです。<prop key="hibernate.hbm2ddl.auto">をcreateもしくはupdateとすることでこの機能を有効にしていました。createとupdateの違いは起動時にDBを初期化するかしないかぐらいかなと思います。