It seems to me a high-level view of completion-no-auto-exit is to allow code outside of choose-completion and choose-completion-string to finish the completion selection process. Presently, this flag does inhibit closure of the minibuffer when choosing a completion but it does not inhibit closure of the list of completions if '?' has been used. I think the two are connected and that whatever external code is used to utilize the finalized completion should also handle the closure of the completion window.
This can be accomplished by simply wrapping the call to 'quit-window' within 'choose-completion' with an '(unless completion-no-auto-exit...)' like so:
(unless completion-no-auto-exit (quit-window nil (posn-window (event-start event))))
Please consider adding this as a quick fix. Then packages like Hyperbole which requires 2 clicks/presses to finalize a completion selection could use choose-completion without having to replace the whole function.
Thanks,
Bob