Here is a globally defined version that would let you define a function for any other kind of link I think. There are probably many variations on this theme, like storing functions in some variable as an alist, etc. Something like that is what would happen if this was defined in the link parameters.
#+BEGIN_SRC emacs-lisp
(defun my-comp (&optional arg)
(format "fruit:%s"
(completing-read "Choose a fruit: " '("apple" "orange" "grapes" "kiwi"))))
(org-link-set-parameters "fruit"
:complete 'my-comp)
(defun org-fruit-make-link-description (link desc)
(replace-regexp-in-string "fruit:" "" link))
(setq org-make-link-description-function
(lambda (link desc)
(let* ((link-type (car (s-split ":" link)))
(make-func (intern (format "org-%s-make-link-description" link-type))))
(if (fboundp make-func)
(funcall make-func link desc)
desc))))
#+END_SRC