1. Możesz jeśli faktycznie tego potrzebujesz, niektóre biblioteki tak robią, że z całej paczki nagłówków tworzą jakiś moduł wrzucając to do jakiegoś Stuff.h
2. #pragma once nie jest częścią standardu. Może wystąpić problem jeśli chcesz aby Twój program działał na wszystkich systemach i był kompilowalny przez wszystkie kompilatory.
Ma oczywiście swoje wady i zalety, więcej informacji jest tutaj:
https://en.wikipedia.org/wiki/Pragma_once
3. Jeśli dobrze zrozumiałem pytanie to w przypadku ifndef tak, musisz przecież wskazać na plik, o który Ci chodzi. Jeśli chodzi o #pragma once to ona wskazuje, że obecny plik źródłowy ma być includowany tylko raz w pojedynczej kompilacji, więc zamieszczasz go po prostu w obecnym pliku.
4. Tutaj więcej informacji jest już w linku, który Ci podesłałem.