Why can't you write a Chef cookbook, Ansible playbook, or the like to deploy a 12-factor-compliant app on a generic VPS? Especially since all the Heroku buildpacks are open source?
I think it's less that you can't and more that most people won't. The reason I know I can provision a new server for app x without hassle is because the chef setup to do it gets used regularly, it's part of the workflow of developing the app. If it breaks I know it's broken because next time me or someone in the team spins up a staging enviro, it won't work.
If you're using Heroku sure you could write that cookbook but in 90% of cases it's going to end up being unmaintained because it's there as a contingency that no-one uses in their everyday workflow. What's more for it to have real value it needs to be tested regularly to make sure it actually functions as expected.
So it's definitely possible to avoid the dependency as long as you don't mind adding a big chunk of devops work. At that point you've got to ask why are you paying the premium for Heroku if you're maintaining the devops expertise and codebase to deploy to a VPS alongside?
If you're using Heroku sure you could write that cookbook but in 90% of cases it's going to end up being unmaintained because it's there as a contingency that no-one uses in their everyday workflow. What's more for it to have real value it needs to be tested regularly to make sure it actually functions as expected.
So it's definitely possible to avoid the dependency as long as you don't mind adding a big chunk of devops work. At that point you've got to ask why are you paying the premium for Heroku if you're maintaining the devops expertise and codebase to deploy to a VPS alongside?