Как указывает @unwind, вам нужно будет, по крайней мере, указать те типы и функции, которые вы хотите использовать для пользователя.
Обратите внимание, однако, что если пользователю не нужноЕсли вы знаете внутренности данного типа, вы просто предоставляете пользователю непрозрачные типы / указатели / дескрипторы.
Другими словами:
typedef struct Opaque Opaque;
Opaque * create(void);
void run(Opaque * handle);
void destroy(Opaque * handle);
Или даже просто:
void * create(void);
void apply(void * handle);
void destroy(void * handle);