Why is this a patch that uses advice and hook instead of a user
option that changes the behaviour of icomplete directly?
Because it's the simplest / cleanest way to do it. It's a kind of
derived minor mode.
Advice is not entirely unproblematic though, so the recommendation is
usually to avoid them in libraries for use by others. Even more so in
Emacs itself, I think.
See the ELisp Manual sections `(elisp) Advising Named Functions' and
`(elisp) Coding Conventions'.
Indeed, we prefer not to use advice in our own code.