The user's script always finishes before packages are closed, and your problem is definitely not related to close() functions ordering. That should be easy to check, just add a couple of print statements to the user script and see whathappens when.
What looks suspicious is that you are accessing ModB instances using the index derived from a parameter in ModA. It could all be fine, but for purposes of testing can you try just listing instances of ModB in the order they are created to confirm that they do have expected values for config parameters. You can add this code at the beginning of close outside of the main for loop and see what's printed:
for (var i = 0; i < ModB.$instances.length; i++) {
for(var j = 0; j < ModB.NumPages; j++) {
print(ModB.$instances[i].MonitorPageChannelDataDescriptions[j].CurrentTVoltageF);
}
}
You have probably seen this guide, but I'll post it again anyway: http://rtsc.eclipse.org/docs-tip/Creating_Configurable_Content. This is the place to check for the order of the config phases.