The issue is that you have “shared” service limits between Dev, QA, and production. With separate accounts you can have service limits per environment. If you are worried about limiting dev resources, it’s a lot easier to do it per account using an organization.
How do you propose automating resource creation if not using either CloudFormation or an equivalent tool.
For instance, Parameter Store and Lambda have account level service limits. For lambda it’s 2000 concurrent instances. Do you really want all of your environments sharing that limit.
Parameter Store has a strict unchangeable limit per account. Do you want your dev environment affecting production?