Get posts for which a custom field is not present, with get_posts

You could use NOT EXISTS as the value for comparem, you could also check for empty value if thats relevant

This code only checks if hidden meta does not exists

$postsForSitemap = get_posts([
    'numberposts'  => -1, 
    'orderby'      => 'modified', 
    'post_type'    => ['post', 'page'], 
    'order'        => 'DESC', 
    'meta_key'     => 'hidden', 
    'meta_compare' => 'NOT EXISTS'
];

This checks is hidden meta does not exists OR has no value

$postsForSitemap = get_posts([
    'numberposts' => -1, 
    'orderby'     => 'modified', 
    'post_type'   => ['post', 'page'], 
    'order'       => 'DESC', 
    'meta_query'  => [
        'relation' => 'OR',
        [
            'key'     => 'hidden',
            'compare' => 'NOT EXISTS',
        ],
        [
            'key'   => 'hidden',
            'value' => ''
        ]
    ]
];