I just checked the games I've played and most of them used a pretty simple verb-noun parser (use keycard), but the latest ones are much more sophisticated as you've pointed out like verb-noun-noun (use keycard with switch) or something like that. Of course I think some use a slimmed down version of Inform7, which should be pretty powerful.
Inform 7 it's the language. The parser comes from the library under Inform6 too and is not that limited, it can accept compund phrases too.
You can just use Inform6 which is OOP oriented and it's very easy to define in game-objects, rooms, attributes such as objects being containers/openable/enterable and such. Setting up basic puzzles it's pretty straightforward.