Just for fun, another workaround I just found:
By pushing straight edges between nodes using splines=false and defining edges twice, the edges are drawn as if they were one single edge, but the labels of each edge that you draw (most of the time) on different sides of the edge.
Therefore, having one edge without a label and another with a label, you can influence the placement of the label (s) of the edge (s).
Your example:
digraph hierarchy_of_D { splines=false; node [color=black,shape=circle] I [label="R"] subgraph infoset1 { rank="same" 1 [label="C"] 2 [label="C"] } I -> 1 [label="War "] I -> 1 [label=" "] I -> 2 [label=""] I -> 2 [label="Peace"] 1 -> 2 [style=dashed, dir=none] subgraph info21 { rank="same" 3 [label="(2,2)", rank=sink, shape="plaintext"] 4 [label="(5,1)", rank=sink, shape="plaintext"] 5 [label="(1,5)", rank=sink, shape="plaintext"] 6 [label="(4,4)", rank=sink, shape="plaintext"] } 1 -> 3 [label="War"] 1 -> 3 [label=""] 1 -> 4 [label=""] 1 -> 4 [label="Peace"] 2 -> 5 [label=""] 2 -> 5 [label="War "] 2 -> 6 [label=""] 2 -> 6 [label="Peace"]}
And the conclusion:

This is not ideal, and your mileage may vary depending on the schedule, but I thought it was worth mentioning it.
source share