You're on the right path. Using require_in like you've shown in your example is the correct way of ensuring those packages are installed before you execute brrap.sls etc. All the _in requistites work in the similar fashion. The require_in requisite is very useful when assigning a require in a different sls file.
So far as your brrap.sls blah.sls states do not have to know the additional components required(foo and bar packages) when it is set up, what you've done is perfectly fine.
On the other hand if you brrap.sls and blah.sls do require the foo and bar package to be installed, you should instead try and create a require requisite from brrap.sls and blah.sls.
take this example
httpd:
pkg.installed:
- name: httpd
service.running:
- name: httpd
On some of your minions you might want to use the http.sls, and on others you might want to use the http.sls and the php.sls states:
include:
- http
php:
pkg.installed:
- name: php
- require_in:
- service: httpd
Note that httpd server will only start if php is installed