Publishing post strips custom html element when user is not admin

To allow your specific <new-page> element in the Classic Editor, you can add a filter so WP recognizes it as an allowed tag:

// Step one - add to the allowed tags
add_action('init', function() {
    // Access the global allowed tags array
    global $allowedtags;
    // Add new-page as an allowed tag
    $allowedtags['new-page'] = array();
    // If you ever use attributes such as <new-page href="https://wordpress.stackexchange.com/questions/334094/url" title="My Title">
    // Then you'll need to include those within the array like so:
    // $allowedtags['new-page'] = array('href' => array(), 'title' => array());
});

// Step two - add to allowed tags in TinyMCE (the editor)
add_filter('tiny_mce_before_init', function($a) {
    $a['extended_valid_elements'] = 'new-page';
    // Again if you ever need attributes, you'll specify those here
    // $a['extended_valid_elements'] = 'new-page[href|title]';
    return $a;
});

Since this code is specifically for TinyMCE you’ll have to test to determine whether it works with the Block Editor, or only Classic. If it doesn’t work with your editor, you also have the option of creating a shortcode or a block that outputs the tag in question.