It crossed my mind that in some situations we can take advantage of Filling:
Table[Plot[Evaluate[
Flatten[{#, # + amp (x + 3.5), # - amp (x + 3.5)} & /@ {Cos[x^2], .3 Sin[10 x]}]], {x, -3, 3},
PlotPoints -> 50, Filling -> {3 -> {2}, 5 -> {6}}, PlotStyle -> {None, Gray, Gray, None, Gray, Gray},
ColorFunction -> Function[{x, y}, Directive[ColorData["Rainbow"][x], Opacity[x]]],
AspectRatio -> 1/4, ImageSize -> 500], {amp, .005, .15, .05}]
The controlled thickness is only vertical in this case. It will not work in some other cases, for example ParametricPlot does not have Filling option at all. But, in ParametricPlot case, for example, we can use the function itself, because it can show bounded areas:
ParametricPlot[{(v + 1) u Cos[u], (v + 1) u Sin[u]}, {u, 0, 6 Pi}, {v, 0.5, 1},
Mesh -> None, MaxRecursion -> 4, Axes -> False, BoundaryStyle -> GrayLevel[.9],
ColorFunction -> Function[{x, y, u, v}, Directive[ColorData["Rainbow"][u v], Opacity[v]]]]