Update: A more flexible work-around post-processing the box expression of a graph to inject styles before edge primitives:
ClearAll[reStyleF]
reStyleF[g_][{(v1_ \[DirectedEdge] v2_) | (v1_ -> v2_), sty_}] :=
Module[{vid1 = "VertexID$" <> ToString[v1], vid2 = "VertexID$" <> ToString[v2],
boxes = ToBoxes[g], pos},
pos = Position[boxes, With[{vid1 = DynamicLocation[vid1, ___],
vid2 = DynamicLocation[vid2, ___]},
ArrowBox[{v1 | vid1, ___, v2 | vid2} |
BezierCurveBox[{v1 | vid1, ___, v2 | vid2}, ___], ___]]];
RawBoxes @ ReplacePart[ boxes, Thread[pos -> Transpose[{sty, boxes[[##]] & @@@ pos}]]]]
Example:
stylelist = {{Directive[Red, Opacity[1], Thick], Directive[Blue,
Dashed, Opacity[1], Thick]},
{Directive[Orange, Opacity[1], Thick], Directive[Purple, Dashed, Opacity[1], Thick]},
{Directive[Cyan, Opacity[1], Arrowheads[Large], DotDashed, Thickness[.01]]},
{Directive[Green, Opacity[1], Thickness[.01]]}};
ga = Graph[{1 -> 1, 2 -> 1, 3 -> 1, 1 -> 1, 2 -> 1, 3 -> 2},
VertexLabels -> Placed["Name", Center], GraphStyle -> "DiagramGold", ImageSize -> 300,
EdgeStyle -> {(1 -> 1) -> stylelist[[1]], (2 -> 1) -> stylelist[[2]],
(3 -> 2) -> Yellow, (3 -> 1) -> stylelist[[4]]}];
gb = Fold[reStyleF[#][#2] &, ga,
{{1 -> 1, stylelist[[1]]}, {2 -> 1, stylelist[[2]]}, {3 -> 2, stylelist[[3]]}}];
Row[{ga, gb}]
Original answer:
A workaround: You can use EdgeShapeFunction
and inject the desired styles as in this answer to a closely related question:
g1 = Graph[{1 -> 1, 2 -> 1, 3 -> 1, 1 -> 1, 2 -> 1, 3 -> 2},
VertexLabels -> Placed["Name", Center], GraphStyle -> "DiagramGold", ImageSize -> 300];
styles = {Red, Directive[Dashed, Blue]};
g2 = SetProperty[#, EdgeShapeFunction -> Module[{i = 1},
({Arrowheads[Large], Thick, styles[[i++]], Arrow[#, .1]} &)]] &@{g1, 1 -> 1};
Row[{g1, g2}]