You could just define a macro to store and change the values as necessary, without using a \label-\ref:

\documentclass{article}
\makeatletter
\newcommand{\mycounter}[2]{\global\@namedef{@cnt-#1}{#2}}
\newcommand{\myref}[1]{\@nameuse{@cnt-#1}}
\makeatother
\begin{document}
\mycounter{abc}{2} %% new counter value == 2
\mycounter{def}{100} %% new counter value == 100
\par \ldots some text (possibly defining new sections, labels, etc.) \ldots \par
\myref{abc} %% generate '2'
\par \ldots more text \ldots \par
\myref{abc} %% generate '2'
\mycounter{abc}{3} %% new counter value == 3
\par \ldots more text \ldots \par
\myref{abc} %% generate '3'
\myref{def} %% generate '100'
\end{document}
\@namedef{<name>}{<stuff>} stores <stuff> in \<name>, while \@nameuse retrieves it. I've preceded the names with @cnt-, since \def (as in your example) is "already taken", while \@cnt-def is not. \global makes the change global, otherwise it could be trapped within an environment based on its scope. The use of \@namedef-\@nameuse (from the LaTeX kernel) also allows you (as in my example) to define names using characters that are usually not allowed.
The above example does not use counters, but it could be modified to allow for this. It didn't seem necessary from the code snippet.
Here is a modified version that uses counters, creating them if they don't already exist counter:

\documentclass{article}
\makeatletter
\newcommand{\incmycounter}[1]{%
\@ifundefined{c@#1}
{\newcounter{#1}}
{\stepcounter{#1}}}
\newcommand{\myref}[1]{\@nameuse{the#1}}
\makeatother
\begin{document}
\incmycounter{abc} %% counter value initialized to 0; associated with label 'abc'
\incmycounter{def} %% counter value initialized to 0; associated with label 'def'
\par \ldots various text (including some calls to macros\incmycounter{abc}\incmycounter{def}) \ldots \par
\myref{abc} %% generate '1'
\par \ldots more text \ldots \par
\incmycounter{def}\myref{def} %% generate '2'
\incmycounter{abc} %% counter value == 2
\par \ldots more text \ldots \par
\incmycounter{abc}\myref{abc} %% generate '3'
\myref{def} %% generate '100'
\end{document}
The first step in \incmycounter{<name>} is to check whether the counter <name> already exists. This is done using \@ifundefined{c@#1}, since all counters defined by \newcounter references a macro prepended with c@. So, the counter <name> is actually stored in \c@<name>. If it doesn't exist, then issue \newcounter{<name>}, otherwise \stepcounter{<name>}.
Another version using counters that could be used to set/step/arbitrarily increment the counters you use:

\documentclass{article}
\usepackage{xparse}% http://ctan.org/pkg/xparse
\makeatletter
\NewDocumentCommand{\mycounter}{s O{1} m}{%
\@ifundefined{c@#3}
{\newcounter{#3}}
{\IfBooleanTF{#1}
{\setcounter{#3}{#2}}
{\addtocounter{#3}{#2}}}}
\newcommand{\myref}[1]{\@nameuse{the#1}}
\makeatother
\begin{document}
\mycounter{abc} %% counter value initialized to 0; associated with label 'abc'
\mycounter{def} %% counter value initialized to 0; associated with label 'def'
\par \ldots various text (including some calls to macros\mycounter{abc}\mycounter{def}) \ldots \par
\myref{abc} %% generate '1'
\par \ldots more text \ldots \par
\mycounter{def}\myref{def} %% generate '2'
\mycounter{abc} %% counter value == 2
\par \ldots more text \ldots \par
\mycounter{abc}\myref{abc} %% generate '3'
\mycounter*[100]{def}%% counter value == 100
\myref{def} %% generate '100'
\end{document}
This uses xparse to provide the command interface. Now \mycounter[<value>]{<cntr>} increments <cntr> by <value> or sets <cntr> to <value> in the optional starred version (\mycounter*[<value>]{<cntr>}).