In summary, you are concerned about playbook users accidentally running the plays on the wrong hosts. Forcing you users to always use '--limit' will at least ensure that they "think" about the target hosts first.
Another approach is to actually include the potential accidents in the way you
model your infrastructure.
In my infrastructure I have a set of "production" hosts and a set of "testing" hosts. I deploy code to those hosts in exactly the same way. However, I don't want to accidentally deploy untested code to "production". So I model
safe deployments with one role and two small playbooks:
# file: deploy_to_testing.yml
- hosts: testing
roles:
- deploy
# file: deploy_to_production.yml
- hosts: production
roles:
- deploy
Plays are your primary mechanism for mapping hosts to a sequence of tasks, and for modelling that association. The --limit option is more about making adhoc refinements for situations that are unusual and not worth modelling explicitly.
Hope this helps,
Kal