Unfortunately there is no way to perform these two deployments in a truly atomic operation, since while they are from the same company Salesforce.com, the technology stacks and servers are not as yet aligned.
Single Script to Rule them All! Thus the best option in my view is to align through a single common scripting approach leveraging source control repositories (ideally different sub folders of same one, if they truly share the same release cycle) containing all the components to be deployed/pushed. Once you have your releases in repos create release tags (recommend you use the same format for clarity), invoke an Ant / Maven build script to take the tag name invoking the required Heroku 'push' and Salesforce 'deploy' operations in one operation, it can then easily be bootstrapped from your CI if needed.
Salesforce Ant Integration and who goes first? Salesforce provide the Migration Toolkit that provides an Ant task for the purpose of taking localling exported files (from source control) and pushing into a target org. Since both are atomic you don't have to worry about them individually, but you do have to consider if the second deployment fails, i personally would do the Heroku deployment first, since its easier to rollback or version deploys (ideally). Where as once the Salesforce deployment completes you would not easily be able to roll it back.
Which build script technology to use? Looking at the two, Ant is favoured for Salesforce, Maven is favoured for Heroku. If you go with the view that the Heroku build is driving the process, you can actually by the looks of it, call Ant tasks from a Maven script, see here for more information on this. Otherwise you can of course use Ant and its 'exec' task to call Maven.
Hope this helps give you some initial steer, of course the devil is in the detail with these things!