Определите вашу структуру в файле .C, и только «объявите вперед» структуру в вашем заголовке.
Итак, ваш файл .C может содержать:
struct Car
{
char *brand;
int maxspeed;
};
И ваш файл .H может содержать это:
typedef struct Car *CarHandle;
Затем напишите функции для управления машиной (сеттеры, геттеры, ...) и поместите их в тот же файл .C, где определена структура.
Конечно, прототипы функций должны быть помещены в заголовок.
Теперь вызывающие абоненты могут использовать CarHandle и функции, которые работают с CarHandle, но никогда не видят, что находится внутри структуры Car.