Why aren’t paragraphs breaking on this page?

get_the_content() returns unfiltered content, and using a shortcode you cannot use the_content() to return filtered content as you cannot echo inside a shortcode. Your best option here will be is to applying the_content filters to get_the_content(), something like:

apply_filters( 'the_content', get_the_content() );

EDIT

Exact usage, replace

$output .= get_the_content();

with

$output .= apply_filters( 'the_content', get_the_content() );