I want to create a graph like the one shown below… but way too complex. I want to use separate images for each of the square nodes and the same image for each of the circle nodes.
I want to know whether using GraphViz is the best option or are there any other options?
Also, I would like to know if I can create a template node in GraphViz for the circle one and reuse it? I don’t want to specify the attributes like image, shape, etc. again and again.

Graphviz is definitely appropriate for what you are asking. The main graphviz.org site appears to be down for the moment, but someone has kindly mirrored the gallery examples (with source) to Flickr.
http://www.flickr.com/photos/kentbye/sets/72157601523153827/
As far as I am aware, you cannot create “templates”, but you can do something like this for the circles:
This will define a node (think of it as a “state” when evaluating the file line-by-line) and then you can define your circle nodes in that “state” before switching to your rectangles.
Depending on your platform, you may also be able to import your .dot file and fine-tune it for publication. There are also a large number of generators and convertors for the format.
Mind you, if you are working on Mac OS X 10.7 “Lion”, I have not been able to find or build a working version of Graphviz yet. In which case I would say it is not yet appropriate for your needs.