Have multiple loops on a page appear after/between page content

Use buffer to simply do that with ob_start() & ob_get_clean().

function custom_summary($atts) {
    extract(shortcode_atts(array(  
        "category" => "",
        "posts" => ""
    ), $atts));

    ob_start();

    $my_query = new WP_Query("category_name=$category&posts_per_page=$posts");
    while ($my_query->have_posts()) : $my_query->the_post();
        // Do all the things.
    endwhile;

    wp_reset_postdata();

    return ob_get_clean();

}
add_shortcode('summary', 'custom_summary');