I think that your solution is probably the best; at least it was what I was going to suggest – except that I wouldn’t count on “[cardgame understood]” being set before the command is parsed; I’m curious why your code actually works. (You could just take the player’s command and put "play " in front of it; that might be more robust to subsequent changes in Inform.)
It does seem as though there should be a better way to handle this but I doubt that there is. The Inform parser takes care of a lot of things by checking to see if the first work of the command is a verb, and allowing alternate stuff to happen only when there’s no verb. For instance, when responding to a disambiguation prompt (“What do you want to examine, the red book or the blue book?”), if the first word entered is a verb it treats it as a new command, and if the first word entered isn’t it puts your answer back into the original command and tries to process it.
And, more relevant to your case, it won’t try to check whether your command is a noun that matches noun-only commands unless the first word isn’t a verb; if it’s a verb it just processes it as the appropriate command and there’s no going back. So getting the parser to process “go fish” as the name of a game when it’s on its own would require modifying the parser in Inform 6 somehow. There’s a bit of code (at least there was in 6G60) that you can modify to tell Inform that some verbs are also used as names, but I don’t think it works for this case, only for the disambiguation responses.
Looking at your code, though, there may be simpler solutions. It doesn’t look like you actually want to allow normal processing of actions during Choosing a Game at all. So you could look at the example “Baritone, Bass” in the manuals, which gives you a way to make the player answer a question and reject everything that isn’t an answer. Also, your “Carry out choosing a game” rule is more complicated than it needs to be; you could just write “Now the current game is the cardgame understood.” Finally, you may notice that the initial room description doesn’t appear; this is because it’s printed by an automatic look action at the beginning of the game, and your “instead of doing something other than picking a game…” rule overrides that.