How to show meta value code HTML after x paragraph

The purpose of echo is sending strings to the output buffer. In your code you are concatenating the result of 4 to the result of the call to echo, which returns nothing. Also, get_post_meta already returns a string so you don’t have to do the type cast. Try:

add_filter( 'the_content', 'prefix_insert_post' );
function prefix_insert_post( $content ) {
    if ( is_single() && ! is_admin() ) {
        $content = prefix_insert_after_para( array(
           //  The format is: '{PARAGRAPH_NUMBER}' => 'AD_CODE',
           
            '4' => get_post_meta(get_the_ID(), 'namevalue', TRUE),      
            
        ), $content );
    }

    return $content;
}

Remember, echo will immediately send a string to the output buffer which defeats the purpose of using WordPress filters since they will be used later on which is why you return the modified value on every filter.

EDIT:

get_the_id only works if you are inside a WP_Query loop. Try:

 if ( is_single() && ! is_admin() ) {
        global $post;
        $content = prefix_insert_after_para( array(
           //  The format is: '{PARAGRAPH_NUMBER}' => 'AD_CODE',

            '4' => get_post_meta($post->ID, 'namevalue', TRUE),      

        ), $content );
    }