Si nel file libreria.cpp devi includere l'header (libreria.h) dove ci sono i prototipi delle tue funzioni ed eventualmente tutto ciò che hai messo in questa libreria (macro, strutture etc)
Al contrario in programma.cpp basta includere libreria.h
Si per il resto ifndef funziona come hai detto tu, così se crei un'altra libreria (chiamiamola nuovalib) che a sua volta include libreria.h, se nel programma includi sia libreria.h che nuovalib.h, il compilatore compilerà libreria.h una sola volta