Hook to change HTTP response headers

Your questions about how you should structure your plugin are somewhat too broad, but here is a specific answer to the title question.

To change headers before they’re sent, use the wp_headers filter.

function tsg_filter_headers( $headers ) 
{
    // For debug. This will break your page but you will see which headers are sent
    // print_r( $headers );

    // It’s a good idea to leave the admin alone
    if ( !is_admin() ) {

        // Add or redefine 'Content-Location' header
        $headers['Content-Location'] = '/my-receipts/42';
    }

    return $headers;     
}
add_filter( 'wp_headers', 'tsg_filter_headers' );

See the WordPress doc here.