I'm going to include 3 different examples on the same page, as its sometimes useful to see and compare...
1st example circle, is from a dynamically created svg element similar to your example (note, you needed append the svg element to the body in your example as well, and probably use createElementNS).
2nd example circle, is from svg markup in the body.
3rd example circle, is to let Snap create the element itself (normally the way, or to use an svg element, like Snap("#container")).
var e = document.createElementNS("http://www.w3.org/2000/svg", "svg");
e.setAttribute('style', 'border: 1px solid black');
e.setAttribute('width', '600');
e.setAttribute('height', '250');
e.id="svg1";
document.body.appendChild( e );
var paper1 = Snap( "#svg1" ); //use element created above
var button1 = paper1.circle(100,100,100);
button1.attr({
fill:"blue",
stroke:"green",
strokeWidth: 3
});
var paper2 = Snap( "#svg2" ); //use element from markup below
var button2 = paper2.circle(100,100,100);
button2.attr({
fill:"red",
stroke:"yellow",
strokeWidth: 3
});
var paper3 = Snap(200,200); //let Snap create element
var button3 = paper3.circle(100,100,100);
button3.attr({
fill:"purple",
stroke:"silver",
strokeWidth: 3
});
<body onload="init()">
....
<svg id="svg2" width="200" height="200">
<circle r="20" cx="20" cy="20"/>
</svg>
</body>
</html>