morbusg already mentioned that some fonts have encircled numbers as Unicode glyphs and showed how to embed them directly. Some fonts provide a more user-friendly interface for accessing the numbers, e.g. Linux Libertine and Junicode. Obviously, this means that we’re deviating from your requirement to use Computer Modern. The advantage of these Unicode numbers presumably is that they were crafted by a font designer, so there shouldn’t be any need for fine-tuning.
Here’s a simple proof-of-concept (You also need to have the junicode package installed):
\documentclass{article}
\usepackage{fontspec}
\usepackage{libertine}
\begin{document}
\libertineGlyph{uni2460} \libertineGlyph{uni24F5} \libertineGlyph{uni2776}
{\fontspec[Ligatures=Discretionary]{Junicode}[1] [[1]] <1>}
\end{document}

These methods are described in the respective documentations.
Here’s an even more comfortable way of accessing these sets of numbers. The doubly circled numbers are (per Unicode) available from 1 to 10, the others from 0 to 20.
\documentclass{article}
\usepackage{fontspec}
\usepackage{libertine}
\usepackage{pgf} % for the calculation
% \libcirc and \libcircblk display their '0' if the parameter is out of range
\newcommand{\libcirc}[1]{\pgfmathparse{
ifthenelse(#1 > 0 && #1 < 21, Hex(9311+#1), Hex(9450)
}\libertineGlyph{uni\pgfmathresult}}
\newcommand{\libcircdbl}[1]{\pgfmathparse{Hex(9460+#1)}\libertineGlyph{uni\pgfmathresult}}
\newcommand{\libcircblk}[1]{\pgfmathparse{
ifthenelse(#1 > 0 && #1 < 11, Hex(10101+#1),
ifthenelse(#1 > 10 && #1 < 21, Hex(9450-10+#1),
Hex(9471)
)
)
}\libertineGlyph{uni\pgfmathresult}}
\newcommand{\juncirc}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}[#1]}}
\newcommand{\juncircdbl}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}[[#1]]}}
\newcommand{\juncircblk}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}<#1>}}
\usepackage{pgffor} % just for the demo loop
\setlength{\parindent}{0pt} % just for the demo
\begin{document}
\section{Linux Libertine}
\foreach \x in {0,...,20} {\libcirc{\x} }
\foreach \x in {1,...,10} {\libcircdbl{\x} }
\foreach \x in {0,...,20} {\libcircblk{\x} }
\section{\fontspec{Junicode}Junicode}
\foreach \x in {0,...,20} {\juncirc{\x} }
\foreach \x in {1,...,10} {\juncircdbl{\x} }
\foreach \x in {0,...,20} {\juncircblk{\x} }
\end{document}

\textcircled? – Matthew Leingang Dec 13 '10 at 13:08