You could just tell Inform to understand those commands as denoting the switching on/off actions, like this:
Understand the command "light" as something new. [Remove old synonym "light" -> "burn".]
Understand "light [something]" as switching on.
Understand "extinguish [something]" as switching off.
(By the way, I realized that I forgot to include the “Understand the command “light” as something new.” line in my earlier example, which meant that Inform was still treating “light” and “burn” as synonyms. The reason it still worked is that I’d specified “light [something preferably held]” as the command for lighting, and the “[something preferably held]”, being more specific, took precedence over the “burn [something]” command for the built-in “burning” action. However, as a side effect, “burn lamp” would also be understood as lighting the lamp. If you use my example code from above, you’ll probably want to add that line before the definition of the lighting action.)
I’m not sure why you’re having problems with it. The following works just fine for me.
Blowing out is an action applying to one thing.
Understand "blow [something] out" and "blow out [something]" as blowing out.
Check blowing out: instead say "You huff and puff as hard as you can at [the noun], but nothing happens."
[Blowing out the lamp is something the player might actually try. Let's provide a better message for that.]
Instead of blowing out the lit lamp: say "You huff and puff as hard as you can at the electric lamp, but nothing happens. Maybe you should just try switching it off?"
Alternatively, instead of creating an actual “blowing out” action, you could just designate those commands as mistakes:
Understand "blow [something] out" and "blow out [something]" as a mistake ("You huff and puff as hard as you can at [the noun], but nothing happens.")
Understand "blow [lamp] out" and "blow out [lamp]" as a mistake ("You huff and puff as hard as you can at the electric lamp, but nothing happens. Maybe you should just try switching it off?").
A subtle difference between these two solutions is that mistakes don’t take a turn, whereas actions do. If your game isn’t particularly time-sensitive, it probably doesn’t matter, but it’s worth keeping in mind. For instance, “every turn” rules don’t fire after mistakes, so if you have, say, other characters moving around every turn, then the difference might matter. In this case, since the message I chose to give for trying to blow something out involves the player actually doing something, it probably should consume a turn, and so a real action might be the better choice. But with a different message, a mistake might be preferable.
Also, mistakes always take precedence over actual actions, so defining “blow [something] out” as a mistake would prevent you from using it as a valid action if you did want to let the player blow something out. However, you could work around that by defining the mistake as, say, “blow [something nonblowable] out”, and then adding, say, “Definition: a thing is nonblowable if it is not a candle.” to your code. That said, just using a real action is IMO better here anyway.