I've had a thought about whether this could be achieved with custom brushes - like a brush that just draws a halftone pattern. I tried making a brush that just has a halftone pattern, and while you can kinda use it to stamp areas of dither, dragging with it makes the effect fall apart, and lining it up can be tricky. So it's not exactly a solution but let's call it an experiment.
You can try it yourself, by putting
brush["ditherBrush" image["%%IMG0AAoACqqAVUCqgFVAqoBVQKqAVUCqgFVA"]]
into the listener.
Other thoughts I've had are whether an extra fill function would work - i.e. instead of filling every single pixel in the area it just fills half of them in the halftone pattern. This could probably be written as a function in a module maybe (i.e. pass it in an image and coordinates) but that's not as convenient as having it in the UI. But this might be easier to implement than reworking the way the patterns function? (Since the 1-bit nature of them may be difficult to change)