I managed to resolve the issue, by re-evaluating how in general I was handling all my included headers across the project.
Basically, I realised I would be better off not including things in the .h files of a module that aren't actually necessary in facilitating the inclusion of that .h in another module - rather, I should split the things that are included between a module's .h and .c. The .h will only include the things that are required to express function definitions, struct, enums, etc (e.g. stdbool, stdint). Anything else: in the .c.
Doing this meant that the inclusion of bar.h was moved to foo.c, and so - as I suspected and was rightly pointed - a circular dependency was avoided.
Thanks for the help everyone.