Actually I'm wrong here. Not all atoms are strings:
{code}
scala> val <foo>{v: xml.Atom[_]}</foo> = <foo>{42}</foo>
v: scala.xml.Atom[Any] = 42
{code}
Apparently &+ operation on node buffer does lots of magic that includes possible [wrapping of values into atoms](https://github.com/scala/scala-xml/blob/master/src/main/scala/scala/xml/NodeBuffer.scala#L43).