There are various reasons, but here are a few of the big ones:
1. Getting ahead of your costs before they start to shoot up as you grow. Check out this pricing calculator for an idea of what I mean: http://containership.io/#pricing
2. Cloud portability: Heroku runs in 2 AWS regions (us-east-1, eu-west-1). What happens if you want to host in a specific country, a completely different provider (maybe you have some free credits?) or even your own data center eventually? Not gonna happen with heroku.
3. More flexibility to run the types of databases, queues, or other open source software that isn't possible to run on Heroku.