Define the structure in the .C file, and only “forward the announcement” the structure in its header.
Therefore, your .C file may contain the following:
struct Car
{
char *brand;
int maxspeed;
};
And your .H file may contain the following:
typedef struct Car *CarHandle;
Then write down the functions for driving the car (setters, getters, ...) and place them in the same .C file as in the case when the structure is defined. Of course, function prototypes should be placed in the header.
Callers can now use CarHandle and functions that run on CarHandle but never see what's inside the Car structure.