Der Punkt ist: Ich hab das Gefühl, dass du irgendwie was falsch verstanden haben musst, was die Funktionsweise von Headern betrifft. Header sind erstmal einfach nur Dateien die Quellcode enthalten. Was genau du wie in welche Header organisierst und ob überhaupt, ist völlig dir überlassen, C++ sagt nur, dass es #include gibt und was es tut, nicht aber, wie du es zu verwenden hast. Es gibt lediglich gewisse Konventionen darüber, was in der Regel sinnvoll ist. Eine dll oder lib existiert jedenfalls völlig unabhängig von irgendwelchen Headerdateien. Der lib oder dll ist es völlig egal, ob jetzt irgendwo irgendwelche Header verwendest oder was auch immer. Um die in einer lib bzw. dll befindlichen Dinge nutzen zu können, wirst du in deinem Code aber entsprechende Deklarationen benötigen. Da du diese Deklarationen in der Regel sowohl beim Erstellen der lib bzw. dll als auch beim Verwenden derselben brauchen wirst, ist es in der Regel sinnvoll, diese Definition in Header zu packen, die überall benutzt werden können, um nicht an allen Orten den selben Code schreiben und konsistent halten zu müssen.