**Update 2:** An alternative approach that gives better-looking curved edges:

 ClearAll[eSF, vSF]
 eSF[clr_Association] := GraphComputation`GraphChartDump`pEdge[blah, blah, blah, #1, #2]/.
 Style[circ_Circle, _] :> circ /. Circle[aa_, bb_, cc_] :> 
 MapThread[Function[{x, y}, {x, Circle[aa, bb, y]}], 
 {clr /@ {First@#2, Last@#2}, Partition[Subdivide[## & @@ cc, 2], 2, 1]}] &;

 vSF[clr_Association] := Module[{off = If[-Pi/2 < ArcTan @@ # < Pi/2, Left, Right]},
 {clr @ #2, Text[Style[Framed[#2, FrameStyle -> None], 
 FontSize -> Scaled[.03]], #, {off, Center}, 
 ArcTan[#] (off /. {Left -> 1, Right -> -1})],
 PointSize[Large], Point@#}] &;

***Example:***

 g = ExampleData[{"NetworkGraph", "LesMiserables"}, "FullGraph"];

 vColors = AssociationThread[VertexList[g], 
 RandomSample[ColorData[{"Rainbow", {1, VertexCount@g}}] /@ 
 Range[VertexCount[g]]]];

 SetProperty[g, {ImageSize -> Large, 
 GraphLayout -> "CircularEmbedding", 
 VertexShapeFunction -> vSF[vColors], 
 EdgeShapeFunction -> eSF[vColors]}]

[![enter image description here][1]][1]



**Update:** You can also use custom functions for the options `EdgeShapeFunction` and `VertexShapeFunction`:


 ClearAll[eSf, vSf]
 eSf[g_, cols_] := Module[{bsf = BSplineFunction[{#[[1]], 
 RegionNearest[Disk[Mean[#[[{1, -1}]]], Norm[#[[1]] - #[[-1]]]], {0, 0}], #[[-1]]}], 
 p1 = Subdivide[0, 1/2, 50], p2 = Subdivide[1/2, 1, 50]}, 
 {Thin, cols[[VertexIndex[g, #2[[1]]]]], Line[bsf /@ p1], 
 cols[[VertexIndex[g, #2[[2]]]]], Line[bsf /@ p2]}] &;
 vSf[g_, cols_] := Module[{off = If[-Pi/2 < ArcTan @@ # < Pi/2, Left, Right]},
 {cols[[VertexIndex[g, #2]]], 
 Text[Style[Framed[#2, FrameStyle -> None], FontSize -> Scaled[.03]],
 #, {off, Center}, ArcTan[#] (off /. {Left -> 1, Right -> -1})],
 PointSize[Large], Point @ #}] &;

**Example:**
 
 g = ExampleData[{"NetworkGraph", "LesMiserables"}, "FullGraph"];
 cols = RandomSample[ColorData[{"Rainbow", {1, VertexCount@g}}] /@ Range[VertexCount[g]]]; 

 SetProperty[g, {ImageSize -> Large, GraphLayout -> "CircularEmbedding", 
 VertexShapeFunction -> vSf[g, cols], EdgeShapeFunction -> eSf[g, cols]}]
[![enter image description here][2]][2]

You can add `Epilog -> Circle[]` in the second argument of `SetProperty` above to get: 

[![enter image description here][3]][3]


**Original answer:**

You can use `BSplineFunction`:

 cps1 = {{8, 5}, {0, 0}, {10, 1}};
 Graphics[{Thick, Red, Line[BSplineFunction[cps1] /@ Subdivide[0, 1/2, 50]], 
 Blue, Line[BSplineFunction[cps1] /@ Subdivide[1/2, 1, 50]]}]
[![enter image description here][4]][4]


 [1]: https://i.sstatic.net/9AFT5.png
 [2]: https://i.sstatic.net/3nfZ4.png
 [3]: https://i.sstatic.net/hF0Hb.png
 [4]: https://i.sstatic.net/D6Jrv.png