Not a complete answer.
You can make use of the undocumented function Typeset`MakeBoxes
mentioned in this post. Here I'll just code waved line and circle as examples:
(* Stolen from Simon's post, notice the tiny modification. *)
SetAttributes[createPrimitive, HoldAll]
createPrimitive[patt_, expr_] :=
Typeset`MakeBoxes[p : patt, fmt_, Graphics] :=
With[{e = Cases[expr, Line[_], Infinity]},
Typeset`MakeBoxes[Interpretation[e, p], fmt, Graphics]]
createPrimitive[Waved[a_, f_, pts_: Automatic]@Circle[p : {x0_, y0_} : {0, 0}, r0_: 1],
ParametricPlot[{x0 + Cos[t] (r0 + a Sin[f t]), y0 + Sin[t] (r0 + a Sin[f t])}, {t, 0,
2 Pi}, PlotPoints -> pts]]
createPrimitive[Waved[a_, f_, pts_: Automatic]@Line[p : {{_, _?NumericQ} ..}],
Module[{fx, fy,
distance = Prepend[Accumulate@Sqrt[Total@Transpose@((Rest@# - Most@# &@N@p)^2)], 0.],
normal}, {fx, fy} =
ListInterpolation[#, distance, InterpolationOrder -> 1] & /@ Transpose@N@p;
normal = Sqrt[fx'[t]^2 + fy'[t]^2];
ParametricPlot[{fx@t + a Sin[f t] fy'[t]/normal, fy@t - a Sin[f t] fx'[t]/normal}, {t,
0, distance[[-1]]}, PlotPoints -> pts]]]
Usage:
Graphics[{Red, Thick, Waved[1/50, 40]@Line[{{1, 0}, {2, 1}, {3, -1}, {4, 0}}], Orange,
Waved[1/10, 50, 51]@Circle[{2.5, 0}, 3/2]}]

Remaining Issues
The achieved syntax is slightly different from the expected one, not sure if the expected syntax can be achieved with Typeset`MakeBoxes
.
The waved style is coded separately for every graphics primitive, so creating a complete waved style still requires huge amount of work.
ParametricPlot
is relatively slow.
The wave doesn't look great at corners:
Graphics[{Red, Thick, Waved[1/10, 40]@Line[{{1, 0}, {2, 1}, {3, 0}}]}]
