Suite XML files are more aimed at establishing some set of constant execution sets. But that doesn't make them static in nature by any standards.
If you resort to leveraging a method selector mechanism via implementing the IMethodSelector interface and then wiring it in (or) you can resort to expressing the method selection mechanism via a BeanShell Script.
Once you have this, you don't need a programmatic way (if your package selection expression is wide enough and covers your entire test code)
So there's no hard and fast recommendation of one approach over the other. IMO you should choose what works for you.
In the case of programmattic way of doing this, I doubt if you would be able to use the surefire plugin because you would have to define a main() method through which you would doing this (or) are you referring to passing in everything as a configuration to the surefire plugin via your pom file (if the latter is true, then you cannot run your tests through an IDE i.e., run more than one test method at the same time)