For future travelers, this is how I got it working:
public function scopeWithoutFullBookingsOn(Builder $query, Carbon $date)
{
$query->whereDoesntHave('trips', function($query) use ($date) {
return $query
->where('type', 'shared')
->whereHas('bookings', function($query) use ($date) {
return $query
->where('status', 'confirmed')
->whereDate('booking_start_date', $date);
})
->whereRaw("trips.capacity <= ANY ( SELECT SUM( bookings.passenger_count ) FROM bookings WHERE bookings.trip_id = trips.id ) ");
});
}