Le truc est que le header peut être importé ailleurs dans le projet, afin d'en avoir toutes les déclarations (de la même manière que tu fais un import de windows.h ou winsock2.h, lesquels, tu l'auras vu, ne contiennent également que des déclarations et prototypes de classes).
Les définitions restent dans les .c et tout cela est résolu à l'édition des liens. Dans le cas d'un import de winsock2.h, l'édition des liens fera (pas forcément automatiquement) appel à winsock2.lib qui contient les définitions des fonctions avec tout le code.
(je dis ça dans l'idée que tu débutes en C, en fait j'en sais rien
)