ltng:require should be loading these libraries in sequence - the mechanism is very similar to how requirejs works to support async loading with dependency order preserved. The next script in the list is loaded after the onload event for the previous script in the list has fired which might be where the timing issue is coming from (e.g. if underscorejs is performing some form of lazy init via setTimeout etc) - although we have other customers using this combination I believe and none have reported this.
There is no use of underscore in Lightning.
What version of underscore and backbone are you using? Do you have a support case open with Salesforce on this already?
October 6 Update: OK I have identified the root cause (pun intended) and its this block of code in backbone that relies on window.self:
Currently SecureWindow.self is not implemented - but the good news is that the fix for this is already on its way to being released on (or near) October 18th. I'm verifying that this code works with that fix in place now and will post back here with my findings shortly.
Update #2 October 6th: Verified that this example is now working perectly under LS with the pending Winter'17 fixes due out around 10/18:
underScoreBackboneJQueryDemo.app
<aura:application>
<ltng:require scripts="/resource/underscorejs, /resource/backbonejs, /resource/jquery_2_2_4" afterScriptsLoaded="{!c.init}"/>
<div id="sidebar">Sidebar</div>
</aura:application>
underScoreBackboneJQueryDemo.app.controller.js
({
init: function(component, event, helper) {
var Sidebar = Backbone.Model.extend({
promptColor: function() {
var cssColor = prompt("Please enter a CSS color:");
this.set({color: cssColor});
}
});
window.sidebar = new Sidebar;
sidebar.on('change:color', function(model, color) {
$('#sidebar').css({background: color});
});
sidebar.set({color: 'white'});
sidebar.promptColor();
}
})