Single Template that can be applied only via URL

You can add a query string to your URLs and read that using the $_GET global.

For example, you could add ?template=main to your posts’s URL. Then, in the single-cpt.php for your CPT, use

<?php if ( isset( $_GET['template'] ) ) $mytemplate = $_GET['template']; ?>

Then, around the bits that you want to display differently, just add

switch ( $mytemplate ):
    case "main":
        //code;
        break;
    case "somethingelse":
        //code;
        break;
    default:
        //code;
endswitch;

Oh, and to add the query string to your URLs in the first place, use:

$url = add_query_arg( 'template', 'main', $permalinktopost );

Hope that helps