To answer your second question first, you do not have to use appAPI.resources.includeJS to include JavaScript files and can in fact concatenate all your include files into one file. However, since the file can grow quite quickly, this is not recommended as there is a 150K limit per file.
Regarding nesting include files, this is certainly possible. Take the following example based on your question:
extension.js:
appAPI.ready(function($) {
appAPI.resources.includeJS('1.js');
});
1.js:
console.log('1.js loaded, now loading 1-1.js & 1-2.js');
appAPI.resources.includeJS('1-1.js');
appAPI.resources.includeJS('1-2.js');
console.log('Done');
1-1.js:
console.log('1-1.js loaded');
1-2.js:
console.log('1-2.js loaded, now loading 1-2-1.js & 1-2-2.js');
appAPI.resources.includeJS('1-2-1.js');
appAPI.resources.includeJS('1-2-2.js');
1-2-1.js:
console.log('1-2-1.js loaded');
1-2-2.js:
console.log('1-2-2.js loaded');
The result in the console:
1.js loaded, now loading 1-1.js & 1-2.js
1-1.js loaded
1-2.js loaded, now loading 1-2-1.js & 1-2-2.js
1-2-1.js loaded
1-2-2.js loaded
Done
[Disclosure: I am a Crossrider employee]