How to hook code to show after the_content?

When the_content hook is called WordPress is already busy generating the page HTML.
the_content is a filter hook so the function must not render any content but should return it as a string.
If you call a function from within the hook and that functions renders some content it will be rendered before the post content.

Using the code below as an example, there are two functions called inside the_content.
The first functions renders a red paragraph. This will appear before the content.
The second functions uses ob_start() to buffer the HTML content then it returns it using ob_get_clean(). This will appear as expected after the content.

function ow_create_section_1(){
    echo '<p style="width:100%;height:50px;background:red;">Section 1</p>';
}

function ow_create_section_2(){
    ob_start();
    echo '<p style="width:100%;height:50px;background:green;"></p>';
    return ob_get_clean();
}

add_filter( 'the_content', 'ow_add_sctns_to_ctnt' );
function ow_add_sctns_to_ctnt( $content ) {
    $section_1 = ow_create_section_1();
    $section_2 = ow_create_section_2();
    return '<div>' . $content . '</div>' . $section_1 . $section_2;
}

This means that your ow_create_section function is rendering some content directly instead of using the buffer and returning it.
Make sure that the classes used inside ow_create_section are returning the content and not rendering it directly.

https://www.php.net/manual/en/function.ob-start.php
https://www.php.net/manual/en/function.ob-get-clean.php