As you can see I need to store FT_Face which is part of FreeType, which forces the users of my code also to include the FreeType headers. One way around it that I came up with is to store a void* and cast it in the source but that's too much hacky...
Any ideas how to sort this out?
Thanks.

This way, users including lib.h do not need to include, or even be aware of, d3d9.h or have any of its symbols dumped into global scope. Indeed you could change the implementation to use OpenGL and you would only have to recompile the library file and relink the project that uses it.