Theme now uses require.js and enqueue script no longer works

If the script is there it should work. It’s probably failing because you’re not declaring the jquery dependency and you’re not wrapping it correctly (in no conflict mode). Here’s how your script should be enqueued:

function custom_scripts() { 
    wp_enqueue_script( 'unique-custom-script', 
        get_stylesheet_directory_uri() . '/custom.js', 
        array('jquery') , 
        false, 
        true 
    );
}
add_action( 'wp_enqueue_scripts', 'custom_scripts', 99 );

And your custom.js:

jQuery(document).ready(function($) {
    $(window).scroll(function() {
        var div = $(".sidebar-wrapper");
        var scroll = $(window).scrollTop();
        if (div.closest(".mk-main-wrapper").length  && scroll > 147) {
            div.addClass("fixed-product-nav");
        } else if (scroll > 263) {
            div.addClass("fixed-product-nav");
        } else {
            div.removeClass("fixed-product-nav");
        }
    });
});

I changed the registering name of your script to unique-custom-script to reduce the risk of name collisions.

When WP is told to register a script under the same name from two different sources, it will look at the version numbers and load the highest. Your version number is set to false, so in your example, if any other theme or plugin registered a script under the name of custom-script WordPress would have made sure to load the other script where you were trying to load yours, provided that the other script had a declared version of 0.0.1 or higher.

Update:

If your theme provides a means register a scripts in footer, just add the contents of custom.js and delete the part from functions.php. It might work.