I have recently started using jvstwrapper and JUCE. It appears that the VST SDK has some concept of different "programs" for your instrument (and effect??). For example, with JUCE the template PluginProcessor class implements a bunch of methods. These are "setCurrentProgram", "getProgramName", "getNumPrograms" etc. I have been messing about with an example plugin for jvstwrapper and in the equivalent class to PluginProcessor it appears that each program holds a bunch of parameter settings for the instrument. But in what cases are these programs actually used? Plus how many are there supposed to be? Does every VST instrument need multiple programs?
I may be wrong, but the program related functions are meant to handle the preset system in the DAWs. However, since doing so doesn't allow the use of a cross-platform cross-DAW preset system, most of plugin developers does not care about these functions, and provide their own preset system in their plug-ins.