find ~ -type d '!' -exec test -d '{}/bar' ';' -print
... but this probably isn't exactly what you want; for the example directories you gave, it'll output:
/path/to/home
/path/to/home/web
/path/to/home/web/domain1.com
/path/to/home/web/domain1.com/public_html/bar
/path/to/home/web/domain2.com
/path/to/home/web/domain2.com/public_html
/path/to/home/web/domain3.com
/path/to/home/web/domain3.com/public_html/bar
/path/to/home/web/domain4.com
/path/to/home/web/domain4.com/public_html
i.e. it lists every directory that doesn't contain a "bar" subdirectory, including even the "bar" directories themselves (unless they contain their own bar subdirectories...). You probably want to add an additional restriction, like only listing directories at a certain depth:
find ~ -type d -depth 3 '!' -exec test -d '{}/bar' ';' -print
or with a certain name:
find ~ -type d -name public_html '!' -exec test -d '{}/bar' ';' -print
...both of which print:
/path/to/home/web/domain2.com/public_html
/path/to/home/web/domain4.com/public_html