The real answer, however, is that if you had the funds and it made good financial sense to challenge and pursue them, your whole perspective on the affair would change. Litigating such a messy case would be very, very expensive (again, in the US at least).
One goal in licensing is to think about "how do I make violations clearcut and cheaper to enforce?" Your approach might require proving how they compiled their code together -- i.e., was it just coincidence that the two ended up looking similar? What if they coded their own VAT tax code but used every other piece of your code? Would that be enough to get around the GPL license? Just a couple examples of why such litigation would be so complex and expensive. You generally don't want to have to get into motives and process -- if you can't look at the two codebases and decide the case, it will be messy.
I'd just keep more of your code proprietary and only permissively license the stuff with very broad appeal.
If I ever release something that is large, I've considered licensing each function and class separately using a BSD license, but licensing the program as a whole as a compilation using a GPL license.
The idea is that if someone wants to just take a handful of useful things from my program, such as my configuration file parser, a sales/VAT tax calculation routine that supports the rounding modes of several jurisdictions, or things like that, they can do so regardless of how they are licensing their code. They can have the relatively low level building blocks.
If they are building something that fills the same niche as my program, however, they have to be careful. For example, if we are both doing word processors and they take my whole text processing engine (which consists of dozens of individual components), then they really need to think twice if their program is not GPL. Even though every function they have taken is available under BSD, they have also taken the selection and arrangement of the functions, which is covered by my compilation copyright.