I don't know where you'd use a small integer vs a regular one...or why...
If you only need one liter of water, you'd generally put it in a bottle, rather than a jerrycan. It's easier to carry, because it's smaller, and drinking or pouring is easier because it's much less unwieldy.
Now imagine you need to transport various liquids, up to one liter each, that should not be mixed; If you put each liquid in a jerrycan, you're going to need much more physical space to store all of them, because logically, jerrycans take up more space than small bottles.
Now, if you have a liquid which has a volume larger than one liter, you'll need to use the jerrycan just so it'll fit, there's no real way around that, but you try to keep it to a minimum.
In this metaphor, the liquid is your data, the bottle is a small integer, and the jerrycan is the regular integer(there are no intermediate sizes, in the context of VoiceAttack at least). If you put data in an oversized container, storing it will take up more physical memory, and processing it will take up more CPU time.
To be fair, in real world usage you're unlikely to run into real issues when using integers in reasonably-sized profiles, but it's good practice to use the datatype that fits, but doesn't grossly exceed, your requirement.
Within VoiceAttack, the main difference is that the "Set a Small Integer (Condition) Value" does not have built-in math features other than incrementing and decrementing, whereas the "Set an Integer Value" action does, though this can easily be worked around using the "{EXP:}" token.