Using the package zref you can specify your own properties (not just page-number, value of counter that was incremented via \refstepcounter, etc) whose values are to be recorded when placing a (zref-)label for cross-referencing.
As long as each of your XX-thingies both creates another subsection and places a label for cross-referencing you don't need to specify a \hypertarget/\hyperlink as the hyperref-package will automatically create a target/destination for each subsection which—in case of placing a cros-referencing-label—can be accessed for creating a hyperlink via \hyperref[{⟨cross-referencing-label⟩}]{⟨text of the hyperlink⟩}.
\documentclass{article}
\usepackage{zref}
\usepackage{varioref}
\usepackage{hyperref}
\newcounter{XXcounter}
\makeatletter
\zref@newprop{XXid}{}%
\zref@newprop{XXdefinition}{}%
\newcommand{\defineAndPrintXX}[3]{%
\refstepcounter{XXcounter}%
\zref@setcurrent{XXid}{FSR\protect~\theXXcounter}%
\zref@setcurrent{XXdefinition}{#2}%
\par
\subsection{FSR~\theXXcounter}%
@bsphack
\begingroup
\let@bsphack\relax
\let@esphack\relax
\label{#1}%
\zref@labelbyprops{#1}{XXid,XXdefinition}%
\endgroup
@esphack
#2\par#3%
}%
\newcommand{\referToXX}[1]{%
\zifrefundefined{#1}{\nfss@text{\reset@font\bfseries??}}{%
\hyperref[{#1}]{%
\zref@extractdefault{#1}{XXid}{}%
} (see section \vref{#1})\newline
\zref@extractdefault{#1}{XXdefinition}{}%
}%
}%
\makeatother
\begin{document}
\section{Tests before definitions}
\noindent\verb|\referToXX{test-1}|:\
\referToXX{test-1}
\noindent\verb|\referToXX{test-2}|:\
\referToXX{test-2}
\section{Place of definitions}
\defineAndPrintXX{test-1}{Definition 1}{Bla bla}
\defineAndPrintXX{test-2}{Definition 2}{Bla bla}
\section{Tests after definitions}
\noindent\verb|\referToXX{test-1}|:\
\referToXX{test-1}
\noindent\verb|\referToXX{test-2}|:\
\referToXX{test-2}
\end{document}

If (for whatever reason) you insist in having another target/destination whose name corresponds to the name of the cross-referencing-label/to the first argument of \defineAndPrintXX, you can handle this via a zref-property as well:
\documentclass{article}
\usepackage{zref}
\usepackage{hyperref}
\usepackage{varioref}
\newcounter{XXcounter}
\makeatletter
\zref@newprop{XXid}{}%
\zref@newprop{XXdefinition}{}%
\zref@newprop{XXdestination}{}%
\newcommand{\defineAndPrintXX}[3]{%
\refstepcounter{XXcounter}%
\zref@setcurrent{XXid}{FSR\protect~\theXXcounter}%
\zref@setcurrent{XXdefinition}{#2}%
\zref@setcurrent{XXdestination}{#1}%
\par
\hypertarget{#1}{\subsection{FSR~\theXXcounter}}%
@bsphack
\begingroup
\let@bsphack\relax
\let@esphack\relax
\label{#1}%
\zref@labelbyprops{#1}{XXid,XXdefinition,XXdestination}%
\endgroup
@esphack
#2\par#3%
}%
\newcommand{\referToXX}[1]{%
\zifrefundefined{#1}{\nfss@text{\reset@font\bfseries??}}{%
\hyperlink{\zref@extractdefault{#1}{XXdestination}{}}{%
\zref@extractdefault{#1}{XXid}{}%
} (see section \vref{#1})\newline
\zref@extractdefault{#1}{XXdefinition}{}%
}%
}%
\makeatother
\begin{document}
\section{Tests before definitions}
\noindent\verb|\referToXX{test-1}|:\
\referToXX{test-1}
\noindent\verb|\referToXX{test-2}|:\
\referToXX{test-2}
\section{Place of definitions}
\defineAndPrintXX{test-1}{Definition 1}{Bla bla}
\defineAndPrintXX{test-2}{Definition 2}{Bla bla}
\section{Tests after definitions}
\noindent\verb|\referToXX{test-1}|:\
\referToXX{test-1}
\noindent\verb|\referToXX{test-2}|:\
\referToXX{test-2}
\end{document}

\label/\ref/\pagereffrom the kernel, the package hyperref (and the package refcount), I suggest the zref-package – Ulrich Diez Dec 29 '20 at 17:37