Stimmt, "extern" muss man nur bei Variablen explizit davor schreiben, bei Funktionen ist es eigentlich unnötig.
(es sollte aber auch keine Fehler verursachen, wenn man es trotzdem verwendet)

Im einfachsten Fall liegen alle Dateien im gleichen Verzeichnis (dann kannst du sie ohne Pfadangabe im Makefile eintragen), dann sollte sich das normalerweise problemlos kompilieren lassen.

Und muss ich eigentlich wenn die include Datei auf weitere Libs zurückgreift diese auch nochmal in der include-Datei includen?
Ja! Ein Beispiel dafür wäre, wenn man Typen wie uint8_t als Parameter bzw. Rückgabewerte nutzen möchte. Ohne #include <stdint.h> würde man in diesem Fall vom Compiler mit Fehlermeldungen bombardiert. In der .c Datei könnte man das entsprechende #include dann übrigens auch weglassen, weil es ja schon in der .h Datei steht (empfehlen würde ich das aber für den Anfang eher nicht, da man sonst leicht den Überblick verlieren kann).