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 ]);