Here's an example of what the JSON looks like when you perform a parent-child subquery through the API.
Here, I've queried
SELECT Id, (SELECT Id, Name FROM Contacts) FROM Account
Contacts is the name of the child relationship. This illustrates the same paradigm you have, where you query from a parent to a child and include child properties.
"Name": "Tim Testerson"
Note that the child objects are stored in a property of the parent object, and the name of that property is the relationship name. The content is a list of further sObject JSON structures just like the top-level response.
Further, relationships traversed from the child object are shown with another sObject JSON a property on the child object, with the name being the relationship name, and the content another sObject JSON structure.
In your case, the name of the child relationship is
Retreat_Bookings__r. You should find more sObject records under that property in your response, in whatever fashion your PHP connector library translates them from the JSON.
When you do
echo $queryResult->current()->FirstName." ".$queryResult->current()->LastName." ".$queryResult->current()-> Retreat_Bookings__r->Retreat_Booking__c->Retreat__c." <BR/>";
It appears to me that your PHP is looking for an extra layer of indirection that isn't there, and failing to index into an array. Although I do not know PHP, I would expect something more like
 is whatever syntax PHP uses for array indexing).