Wpdb->last_query returns bad query

get_users() is a convenience wrapper around WP_User_Query. Maybe you can use that directly, e.g.

$user_search = new WP_User_Query(
    array(
        'meta_query' => array(
            'relation' => 'AND',
            array(
            'meta_key' => 'last_login',
                //'meta_value' => 'DATE_SUB(NOW(),INTERVAL 7 DAY)',
                'meta_value' =>  date('Y-m-d H:i', strtotime('-7 days')),
                'meta_compare' => '<=',
                'type' => 'DATE',
            ),
            array(
                'meta_key' => 'email_not_logged',
                'meta_compare' => 'NOT EXISTS',
            )
        )
    )
);

And then look at the SQL it generates by printing $user_search->request?