Die eckigen Klammern definieren eine Zeichenklasse.
Eine Zeichenklasse ist auch nicht dafür geeignet - um bestimmte voran- oder nachgestellte Ausdrücke zu bedingen gibt es lookahead und lookbehind assertions. In dem Fall eine negative lookbehind assertion:
^(?<!www.)example.com$
Einem zu findenden example.com darf nicht www. vorangestellt sein - die assertions sind übrigens immer non-capturing.
Manchmal ist es aber einfach besser nicht alles in einzelne ausdrücke zu verpacken - eine zweite RewriteCond voranzustellen ist wesentlich einfacher zu lesen:
RewriteCond %{HTTP_HOST} !^www.
RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]