How can I get the query that would be run for the archive page?

In each of your hooks & filters handlers, in addition to checking for archive conditions, check for a custom query var that you can then set for a custom/manual query. For example, where you might have:

function wpse_223991_pre_get_posts( $wp_query ) {
    if ( $wp_query->is_main_query() && $wp_query->is_post_type_archive( 'my_post_type' ) ) {
        // Awesome custom stuff
    }
}

add_action( 'pre_get_posts', 'wpse_223991_pre_get_posts' );

… change it to:

function wpse_223991_pre_get_posts( $wp_query ) {
    if ( ! $do_it = $wp_query->is_main_query() && $wp_query->is_post_type_archive( 'my_post_type' ) )
        $do_it = $wp_query->get( 'custom_stuff_please' );

    if ( $do_it ) {
        // Awesome custom stuff
    }
}

add_action( 'pre_get_posts', 'wpse_223991_pre_get_posts' );

Now in addition to it running your main custom post type archive, you can trigger it whenever you set custom_stuff_please in a custom query:

$query = new WP_Query([ 'custom_stuff_please' => true ]);