Currently every xulrunner app has the following set in all.js: network.protocol-handler.expose-all=true This means that various components (protocol handler, urlloader, xul text-links etc.) all believe that the app can handle every protocol under the sun and will never try to use an external handler for them. Seems to me that a sensible default would be for this to be false (possibly with a setting for chrome to be true) then app developers can just expose protocols as they handle them.
network.protocol-handler.warn-external-default is another that might want changing. Currently true it breaks the feature of the handler dialog to remember your choice in the future.
XULRunner has been removed from the Mozilla tree: see https://groups.google.com/forum/#!topic/mozilla.dev.platform/_rFMunG2Bgw for context. I am closing all the bugs currently in the XULRunner bugzilla component, in preparation for moving this component to the graveyard. If this bug is still valid in a XULRunner-less world, it will need to be moved to a different bugzilla component to be reopened.