Heroku isn't just a transparent proxy to EC2. You are getting several other services that are not easy to put together on your own - routing infrastructure, simple git push deployment, world-class postgres tooling. To put this kind of stuff together on your own is costly, and you will likely make a lot of mistakes on the way (mistakes Heroku has already made and learned from).
Another thought: When you use Basecamp, are you calculating how much they are spending on hosting your data?