Widget Script Loads at Bottom of Page

That’s expected behaviour, since you’re calling wp_enqueue_script mid-page, so at that point the <head> ship has sailed, and the only other option is to enqueue in the footer, which is fine.

I didn’t spend too much time reading the actual script that you’re enqueuing, but it seems like it it’s doing some document.write() as soon as it’s loaded, which is why you’re probably seeing the output in the footer.

To solve your problem I would rearchitect the script a little bit, turn it into a function that accepts an element and then in your widget output call that function:

<div id="my-widget-id"></div>
<script>
jQuery(document).ready(function($){
    my_function($('my-widget-id'));
});
</script>

That way the script will wait for your .js file to load in the footer, and then call its function passing the widget ID, which you can hopefully insert your output into with $.html().

Hope that helps!