ほかの方の回答にある通り、出来合いのパッケージを使うのが簡単ですが、
それはそれとして、自作のカウンタを参照する方法について紹介します。
自作カウンタを参照できるようにするには、\stepcounter の代わりに \refstepcounter を使うのがよいです。
LaTeX のソースファイル(latex.ltx)にある定義を読めば違いが分かると思います。
この方向で行くなら、
\newcommand{\programlist}[1]{\begin{center}リスト\the\value{Cntr}\hspace{1zw}#1\stepcounter{Cntr}\end{center}}
を
\newcommand{\programlist}[1]{\refstepcounter{Cntr}\begin{center}リスト\the\value{Cntr}\hspace{1zw}#1\end{center}}
のようにすればよいでしょうか。
また、「図表のように」ということであれば、figure 環境や table 環境はどちらも
\newenvironment{figure}{\@float{figure}}{\end@float}
のような具合に \@float を使って実装されています。
これを参考にするのが良いでしょう。
(figure 環境などの定義はクラスファイルにあります。例えば article.cls など)
\@float の内部で御膳立てが整えられて \caption が使えるようになり、
\caption を使ったときに内部で \refstepcounter{figure} が呼びだされるので、
\label と \ref で参照できるようになります。
(\@float などの定義は latex.ltx にあります。)
figure の代わりとなるプログラムリストの環境名(例えば plist など)を決めて、
カウンタの名前も環境名と同じにして用意します。