Andrew - I wasn't quite sure what you were saying here about the dragenter/dragleave events. The problem with multiple events triggering is an inherent problem of these events, which is why there is some complex logic in there to try (and in 95% of cases succeed) in counting whether we are actually over a section at the current moment. The drag/drop reordering of sections came later.
If you can find some way of improving the logic for determining when we're dragging over a section, then I'd be happy to take a look at it.
The minimal loader is probably worthwhile (although given the fairly small size of the drag/drop code, would this not end up with the overhead of downloading an extra module being greater than the saving of not downloading it in the first place?).
The 'preview' elements are generated at page load on purpose to work around a firefox bug whereby adding them 'on demand' meant that they were not counted as drop targets by the drag and drop code. Firefox only seems to handle 'dragenter/dragleave/drop' events properly for child elements that were present when the event listener was added to the outer container - as a result, dropping a file onto the 'add file(s) here' message causes the file to be displayed, not uploaded. If you have found a better workaround for this bug, then I'd be interested in seeing what it is.
If delegated listeners work better than attaching listeners to each section, then that sounds like a good improvement. Thinking about it, since the code already searches to find out which section you were in, given the target node that triggered the event, it could probably have been implemented as events on the whole page anyway (note that the current implementation evolved over time, in response to a number of issues that came up whilst developing it).
The styling of the 'add file(s) here' is deliberately meant to show where the new resource will appear in the section, which I think is clearer than suggesting it might appear somewhere in the section, however if there is a general preference for the 'whole section' styling, then I'm happy to go with that.
Feel free to contact me via dev chat, if you want to talk through any of these code changes.