AWS and Heroku aren't really competitors. Firstly, since AWS is IaaS, whereas Heroku is PaaS, they target different users. More importantly, Heroku is built on top of AWS, so Amazon gets paid for all the resources used by Heroku apps.
Sort of. They're still targeted at different users, though.
Heroku is for individual developers to directly develop their app in terms of.
AWS, meanwhile, is mostly for enterprises: it's a "virtual datacenter" for your (much-reduced) ops team to manage in place of a real datacenter. In that sense, Elastic Beanstalk is not a service that AWS provides developers—it's a service that AWS provides your ops team to provide to in turn provide to your developers.