Two ways, easy or hard.
1) Easy : Do what you were told above, reset the weapon as soon as the mission starts using is-skill-level-at-least and set-primary/secondary-weapon SEXPs. This is basically what you wanted for b).
The problem with this is that the loadout screen won't work properly, you'll have to either turn loadout off or live with the fact that the player can assign himself a different weapon from the one he ends up with in the mission.
2) Hard : Use variables in team loadout. In this way you set persistent variables in the preceding mission to hold the number or type of weapons you want available. This is basically what you wanted to do in a).
For instance you could set a variable to "Maxim" by default but to "Prometheus" if the skill level is insane. Then you set the loadout of the actual mission to only include the types of weapon mentioned by the variables. The problem with this method is that you can get past it by changing your skill level in the preceeding mission to hard and then playing it on insane. Similarly, if you find the mission too hard on insane and step down to hard, you're stuck with the insane level weaponry. There are ways to mitigate that somewhat though.
Short answer, it depends on how anal you want to be about this. If you haven't understood the hard one at all, do the easy one.