Jakby nie można było wypisać return $countPeople;
A masz gdzieś w tej funkcji zmienną $countPeople? Nie masz, a zmienne widoczne są tylko w obrębie jednej funkcji. Więc odwołanie do samego $countPeople spowoduje błąd. Dlatego przy użyciu $this odwołujesz się do właściwości obiektu, którą masz wcześniej zdefiniowaną.
dlaczego wtedy po $this -> wypisujemy bez znaku dolara zmienna? dlaczego tak jest?
Tak jest a dlaczego... nie wiem, po prostu, ktoś tworząc język PHP tak wymyślił :P
Jeśli wywołasz właściwość ze znakiem $ to właściwie nie będzie wywołanie właściwości o takiej nazwie, a wywołanie właściwości o nazwie ze zmiennej.
$this->countPeople ← szuka takiej właściwości obiektu
$this->$countPeople ← odczytuje wartość zmiennej $countPeople, podstawia ją tu i szuka właściwości o takiej nazwie
Mam nadzieję, że trochę rozjaśniłem.