Well, TreeLayout should meet your requirement about no overlapping nodes, but because TreeLayout assumes the graph is structured as a tree but your graph is not tree-like at all, there may be links crossing over nodes. LayeredDigraphLayout will produce a better result, although if your graph is large the layout will be very slow.
I don’t understand your second requirement.
If your second requirement was meant to be about when a Node (not a Link) is selected the Links coming from it should be drawn in a different color, that is easy to implement purely in XAML.
Add a converter:
<go:BooleanBrushConverter x:Key="theBrushConverter" FalseBrush="Black" TrueBrush="Red" />
Then add a Binding to your Link DataTemplate:
<go:LinkPanel . . .>
. . .
<go:LinkShape x:Name="Path" StrokeThickness="2"
Stroke="{Binding Path=Link.FromNode.IsSelected, Converter={StaticResource theBrushConverter}}" />
. . .
</go:LinkPanel>
But there are a lot of other possibilities, and I’m not sure that this is what you want.