I've thought about this too. You should take a look at Stanford's GGP language (http://games.stanford.edu/). Of course, this isn't what you want users to program the game in, but it is actually a fairly powerful way to express finite games like the ones you mentioned. It basically follows the state machine approach. The language itself follows the logic programming paradigm; I happen to disagree with the approach taken as it is verbose and doesn't scale well -- on a state transition you basically have to construct an entirely new set of propositions, even if you don't make significant changes to the old ones. They do this because hypothetically it maintains monotonicity, although they aren't fooling anybody.
At one point in time I completely rewrote portions of the language to be useful for actual game development, but I never actually went anywhere with it. But using horn clauses and inference for board games like you mentioned can really save time as opposed to implementing every single rule by hand in a different language.