(Top posting, sorry. I'm on my phone...)
If set_checked() isn't what you want (and it sounds like it is not!) then I guess I always assumed the stock behaviour of the base widget would do that - but since you're asking I'm guessing it does not.
Erco has a neat demo of making a widget browser on his Cheat Sheet; it would be feasible to tweak that to hold lines of text with check boxes then add selection handling to suit your needs, I reckon.
Other than that... I got nothing...
--
Ian
From my Fairphone FP3