Yes, it’s possible. You’ll need to use the template_include
filter.
To return a different template for a custom post type of “my_custom_post_type”, you could do something like this:
add_filter( 'template_include', 'wpse_272261_template_include', 100 );
function wpse_272261_template_include( $template ) {
if ( is_singular( [ 'my_custom_post_type' ] ) ) return PATH_TO . 'template.php';
return $template;
}