Файл заголовка обычно содержит только объявления и прототипы, но в современном C он может содержать «статические встроенные» функции вместе с их определениями. (А в C ++ классные шаблоны обычно имеют свои реализации в заголовочном файле, но пока не беспокойтесь об этом ...)
Объекты в библиотеке могут быть написаны на любом языке; до тех пор, пока они подчиняются «связыванию C» (по сути, соглашениям о вызовах и именах на уровне сборки), они могут вызывать и вызываться из функций C. Например, некоторые функции библиотеки, критичные к производительности, нередко пишутся на ассемблере.
Ответ на ваш последний вопрос зависит от компоновщика. Я полагаю, что GNU ld включает в себя все функции из всех файлов .o, на которые ссылаются все функции, но, если честно, я даже не уверен. В любом случае большинство библиотек, с которыми вы ссылаетесь, являются «общими библиотеками», что означает, что ответ на ваш вопрос даже не имеет значения. (На самом деле, в общем, это не имеет большого значения, поскольку ОС будет загружать страницы с диска только тогда, когда к ним действительно осуществляется доступ. Таким образом, размер исполняемого файла на диске и объем оперативной памяти, который он занимает во время работы, может сильно отличаться. )