I find the DT syntax rather confusing. The answer from Xofo is accurate but doesn't really cover all of the questions you asked.
What does it convey if a node has & as its prefix?
The ampersand is how you reference a label. A node has a name and it optionally has a label formatted as: label: name. Omit the colon if no label. You can reference a node for two reasons (that I can think of): 1) to override the definition of the node (often in another file) or 2) link a property of one node to another node.
A label is only needed if you want to reference the node elsewhere ... using the ampersand syntax. Put another way, if you want to reference a node somewhere, then ensure that it has a label and then reference the label with an ampersand prefix.
What is the necessity of separating them from root node, while they can be present in the root node itself?
A node that has a name (just not a label) defines a node in the hierarchy and therefore must be inside something that specifies a position in the hierarchy. It could be in a tree of node definitions -- i.e. root node. Or it could be inside a node reference since a node reference is associated with a node definition that is at some position in the hierarchy.
A reference node should be outside of the hierarchy. IDK whether it makes sense to have a reference node inside a reference node ... probably not.
Interestingly, the above example also has two root nodes, how is that possible?
Nodes (both definitions and references) overlay; adding new info and overwriting existing. In your example, the first root defines two properties (model and compatible) and the second root adds a sub-node (hdmi) to the root.
I'll show how this stuff is useful. You could define a node a and then modify a like this:
/ { a { x = "1"; }; }; / { a { x = "2"; }; };
Or you could do it this way:
/ { b: a { x = "1"; }; }; &b { x = "2"; };
This is a trivial example, but consider that names can be longer and the hierarchy can be deeper.
FYI: a node name is unique within the children of a node -- by definition! If there are blocks that use the same node name for multiple blocks in the context of the same parent node, then the blocks are merged. On the other hand, a label must be unique across every block/node. A duplicate label results in a build error.
hdmi,model, andcompatibleare at the same level in the tree. The&is a shorthand reference to an already existing node, which is probably defined in an include file. These sections are either overriding entries in the original definition or adding new nodes to the entry.