The proper way is not exporting implementation details at all, instead define opaque types in your header files like this: `typedef struct ssl_st SSL;`. This comes from OpenSSL, it means users can use `SSL *` pointers, but they don't know what those pointers point to.
Of course you can also have internal header-files within your own project, which you don't share with the end-users of your product.
Of course you can also have internal header-files within your own project, which you don't share with the end-users of your product.