(1) - yes
(2) - require.js-compatible modules should state their dependencies in the module. we have to configure those that aren't in config.js with the shim/deps section.
(3) - no. Though I'm not sure if I understand correctly. Continuing the example from your big block, the first function argument (`_`) could be called whatever you want. However it was exported in config.js is irrelevant. 

To be clear, things like Bootstrap _do_ have a corresponding parameter in the function arguments, but because Bootstrap isn't set up to work with require.js, that parameter is `undefined`.

For things like `underscore`, we _don't_ have them from (3). We have them because they were loaded as a dependency. If we include them in the first argument to define, but exclude them from the arguments to the second argument (!), we have them because they attached themselves to the window's scope. If we did something silly like `exports: "Barry"` in config.js, we wouldn't have a global `Barry` object, we'd have the normal `_`.

Using underscore as an example:

Without the `exports: "_"` in config.js, this works using the window's reference to `_`:
```
define([underscore], function() {
  _.each(..);
});
```

This will throw 'Uncaught TypeError: Cannot call method 'each' of undefined':
```
define([underscore], function(_) {
  _.each(..);
});
```
The `exports: "_"` in config.js makes this second case work.

As a minor performance note - probably really minor -, it's a bonus to have the references to `$` and `_` in local scope.