... and it's intertwined with Gtk.
I can see that "simply invoke hp-setup" isn't that simple.
However, I can offer a trivial change which would improve things. The *actual* problem is that system-setup-printer presents the user (me, for example) with a set of incomprehensible options, defaulting to the first one. For an HP printer this happens to be JetDirect, followed by IPP, followed by (after a pause!) by hp:/net... (the correct URI!).
Two issues here. Firstly, as a naive user, not understanding what this is all about, I trust the default to be a sensible one, which it happens not to be. This can be, I think, very easily fixed by re-ordering probe types defined on line 245 of probe_printer.py and putting probe_hplip top, before probe_jetdirect.
The other problem arises, as in my case, when the user clicks on Network printer -> Find Network printer, at which point he appears to be prompted for an IP address of the printer. In the meantime, the network scan is being done, which fails (due to firewalls, I think) and a list of generic options is offered, headed with (and defaulting to) JetDirect. Re-scan based on the ip-address take a while and in the meantime, the user (me) click on Forward, just as the hplip entry pops into the list of options. That's just a problem with user interface, because it is entirely unclear what is happening or why. Re-ordering the probes won't solve this, but will make it a bit more likely that the hplip URI will get discovered and defaulted to. Anybody still complaining can be told not to be too hasty.
Not that I would advovate that in preference to fixing the user interface -- perhaps the system could pop up a message "Probing... please wait". But my knowledge of python/Gtk is way-insufficient to even suggest how this should be done.
Over to you?