It's tempting to take the "abstract all the things" approach when you take a swing at board games. I started down that path, wanted the ability to implement any variation, and it was much more difficult to contain even if just focusing on the card-based "board game" genre.
I think if one truly took this approach to the logical end, they would end up creating their own specialized board game programming language.