Custom arguments in WP_Query

WordPress is generating the tax query for you – when you register a custom taxonomy, it also registers what’s known as a query var. This is a “key”-type value that means you can simply do this:

new WP_Query([ 'age_from' => 2 ]);

… and WP will transform that to:

WP_Tax_Query([
    [
        'taxonomy' => 'age_from',
        'terms'    => 2,
        'field'    => 'slug',
    ]
]);

…but not before pre_get_posts fires (it happens on line 2802 of wp-includes/query.php). My suggestion would be to use a direct tax query in your arguments, rather than taxonomy query vars, so you have complete control over the relationship:

$args = array(
    'post_type'   => 'place',
    'post_status' => 'publish',
    'orderby'     => 'date',
    'tax_query'   => array(
        'relation' => 'AND',

        array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'age_from',
                'terms'    => '2',
            ),
            array(
                'taxonomy' => 'age_to',
                'terms'    => '5',
            ),
        ),

        array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'place_caregivers',
                'terms'    => 'no',
            ),
            array(
                'taxonomy' => 'place_type',
                'terms'    => 'indoor',
            ),
            array(
                'taxonomy' => 'daddy_lounge',
                'terms'    => 'no',
            ),
        ),
    ),
);

Read about “nested” relations in WordPress 4.1