I think this might be a simpler approach. what you want (I think) is to leverage font-lock on tooltips to set a help-echo function instead of a string. You can override org-activate-footnote-links with an advice (which makes it easy to undo of you need). The tooltip function then looks up the tooltip when you ask for it. The 3 pieces are below. the first function looks up and returns a tooltip. the second is a lightly modified version of org-activate-footnote-links which just replaces the footnote reference string with the first function. the last piece is the override advice. you could use a minor mode to toggle the advice on and off.
#+BEGIN_SRC emacs-lisp
(defun footnote-reference-tooltip (_win _obj position)
"Get footnote contents"
(save-excursion
(goto-char position)
(let* ((fnf (org-element-context))
(label (org-element-property :label fnf))
(p (nth 1 (org-footnote-get-definition label))))
(when p
(goto-char p)))
(let ((fnd (org-element-context)))
(string-trim
(buffer-substring (org-element-property :contents-begin fnd)
(org-element-property :contents-end fnd))))))
(defun footnote-tooltip (limit)
"Add text properties for footnotes."
(let ((fn (org-footnote-next-reference-or-definition limit)))
(when fn
(let* ((beg (nth 1 fn))
(end (nth 2 fn))
(label (car fn))
(referencep (/= (line-beginning-position) beg)))
(when (and referencep (nth 3 fn))
(save-excursion
(goto-char beg)
(search-forward (or label "fn:"))
(org-remove-flyspell-overlays-in beg (match-end 0))))
(add-text-properties beg end
(list 'mouse-face 'highlight
'keymap org-mouse-map
'help-echo
(if referencep #'footnote-reference-tooltip
"Footnote definition")
'font-lock-fontified t
'font-lock-multiline t
'face 'org-footnote))))))
(advice-add 'org-activate-footnote-links :override 'footnote-tooltip)
#+END_SRC