I'd recommend putting your actions into a single command:
lights [on;off]
Begin Boolean Compare : [ship.light] Equals False
Begin Condition : ([{CMDACTION}] Equals 'Spoken' AND [{CMD}] Contains 'off')
Play sound, '{VA_SOUNDS}\Elite Dangerous\Beleuchtung\leuchtschonaus.mp3'
Else If Boolean Compare : [ship.lightpossible] Equals False
Play sound, '{VA_SOUNDS}\Elite Dangerous\Sperrung\gesperrt.mp3'
End Condition - Exit when condition met
Press Insert key and hold for 0,06 seconds and release
Play random sound (5 items)
Set Boolean [ship.light] to True
Set Boolean [ship.lightpossible] to True
Else
Begin Condition : ([{CMDACTION}] Equals 'Spoken' AND [{CMD}] Contains 'on')
Play sound, '{VA_SOUNDS}\Elite Dangerous\Beleuchtung\leuchtschonan.mp3'
End Condition - Exit when condition met
Press Insert key and hold for 0,06 seconds and release
Play random sound (5 items)
Set Boolean [ship.light] to False
Set Boolean [ship.lightpossible] to True
End Condition
This command requires VoiceAttack v1.6.4.1 or newer as it uses the condition builder feature.
Both condition builder conditions contain two "Text" compares, where the token(in "{}") goes in the "Variable Name / Token" field, and the text it's compared against goes into the "Text" field.
This allows you to either speak "light on" or "light off", which work as your current commands do, or any other method of triggering the command(keyboard key, mouse button, joystick button, or executing it from the command list context menu) to toggle between both states.
Note that I've used "Boolean" rather than "Small Integer" values for "ship.light" and "ship.lightpossible"; A boolean value is either "True"(for on, in this case), or "False"(for off, in this case).
It'll work fine with small integer values as well, but as you're using it to keep track of a binary state, the boolean datatype is the right tool for the job.
If you're going to use boolean values in this context, do make sure to check the "Evaluate 'Not Set' as false" option in conditions that use it.