First of all, I want to clarify, "package" refers to a single javascript file which contains a compilation of two or more modules, for optimization purposes.
So lets just dig into an example, and it should be clear what the issue is in this situation:
<script src="curl.js"></script>
<script> // preloads!
curl("my-super-package"); // contains module1, 2, and 3
</script>
<!--
in a completely separate (and dynamic) part of my application, I'm going to dynamically inject content and load the individual modules required by the content
-->
<script>
curl("module2", function() { // use module2
});
</script>
<script>
curl("module4", function() { // use module4
});
</script>
OK. So the problem should already be clear, but lets talk this out. We've got a race condition, with module 2 (as it should not be downloading "module2" since it is already inside of the package). So why would we have code like this? You've got a huge application, where not all parts talk with one another, but you've got some form of "master" (potentially a few) where your common work takes place (such as including curl, and pre-loading common files such as this "package"). Ideally, we want to allow these types of disconnects between the master and the child pages, as it can be very difficult to keep everything in sync otherwise.
Of course, I could simply remove the inclusion of the "package", and all is well again. In a perfect world, developers can throw in their "curl" calls left and right, for each and every requirement they have, without concern over what has already been included, or what packages may have been included. And as "common" files change, we swap out with different packages in the header. The potential here is some substantial optimization's in the "master" with no impact on the remainder of the application -- if it worked, that is.
I have some ideas on how this could be addressed, but wanted to first throw the problem out there. I'm not sure if it is a limitation of AMD, or a misuse of it, or otherwise.