DLLs benutzt man nicht, weil das Programm zu groß ist. Es ist richtig, dass durch die Benutzung von DLLs das Hauptprogramm kleiner wird, aber das ist nicht der Hauptgrund, warum man das tut.
DLLs benutzt man, weil sie Schnittstellen bieten und austauschbar sind. Sie vermeiden Redundanz, wenn sie Funktionen beinhalten, die mehr als ein Programm benötigt.
Wenn dein Programm nicht von Anfang darauf hin entworfen wurde, kann es schwierig werden, Funktionen in DLLs auszulagern, es sei denn, du hast beim Design gut auf saubere Schnittstellen geachtet.
DLLs kann man entweder über Load Time Dynamic Linking einbinden - dazu brauchst du eine Importbibliothek - oder mittels Run Time Dynamic Linking (LoadLibrary, GetProcAddress). Bei Load Time Dynamic Linking startet dein Programm gar nicht erst, wenn die DLL nicht da ist. Bei Run Time Dynamic Linking kannst du darauf zur Laufzeit reagieren.