(*Steve: I think that sometimes there might be a need but any capabilities to satisfy this need are unknown.)
Mostly the reason why a CC message exists, is because of the way the MIDI protocol was originally designed. MIDI messages have a "status" byte (or 8 bits) which also contain the MIDI channel (when applicable). Including the channel number which has the range of 0-15 (half a byte or four bits, or a nibble
) in the core status byte, leaves only another 4 bits left to identify the message in question. Since a nibble can only represent a number from 0 to 16, only so many message types can be accommodated.
Why such confined and nit-picking composition? Well, certainly because they wanted to make messages as small as possible. Back then it was cool just to be able to play on keyboard A and device B produced the sound. We have come some way since then, in our need for electronic control.
So looking in the MIDI protocol standard (link above by filterfreak) you can see that the most common messages, e.g. Note On and Note Off, are "core" (as in each occupying an entire status byte) messages, whereas another common messages, like CC, requires that extra data byte, just to identify what controller number a particular CC event is referring to. This is where the CC the range of 0-127 comes into play. That is the limit of the number of CC's that can be accommodated.
CC's were not standardized much (there were some) but has been puzzled together a bit since early days. This makes CC a little bit more difficult to understand, but it really isn't that hard.
There is also a SysEx (System Exclusive) message which is often involved when dumping entire programs or banks of programs. Steve, you might want to look into this in the manuals for your devices.