Another take based on @rasher's comment:
Graphics[{Thickness[.02], Arrowheads[{{-.1, 0, Graphics[{Thickness[.02], CapForm["Round"], Line[{{-1, 0}, {0, 0}}]}]}, {.2, 1}}], Arrow[BSplineCurve[{{0, 0}, {4, 7}, {2, 11}, {10, 10}}, SplineWeights -> {3, 5, 4, 5}], .05]}]

Update:
What if the arrow is dashed or dotted?
Overlaying BSplineCurve (without Arrow) with a transparent Arrow with some manual adjustments seems to work:
ah = GraphElementData["FilledArrow", "ArrowSize" -> 0.1][{{0.`, 0.`}, {1.`, 0.`}}][[1, 1, 1, 3, 1]]; g1 = Graphics[{Thickness[.03], Red, Dashing[.02], CapForm["Round"], BSplineCurve[{{0, 0}, {4, 7}, {2, 11}, {10, 10}}, SplineWeights -> {3, 5, 4, 5}]}, ImageSize -> 300]; g2 = Graphics[{Thickness[.03], Arrowheads[{{.15, 1, {ah /. FilledCurve[x__] :> {Opacity[1], Red, FilledCurve[x]}, .5}}}], Red, Dashing[.02], CapForm["Round"], BSplineCurve[{{0, 0}, {4, 7}, {2, 11}, {9.2, 10.05}}, SplineWeights -> {3, 5, 4, 5}], Opacity[0], Arrow[BSplineCurve[{{0, 0}, {4, 7}, {2, 11}, {10, 10}}, SplineWeights -> {3, 5, 4, 5}]]}, ImageSize -> 300]; Row[{g1, g2}]

ArrowHeadswith custom arrow graphics... $\endgroup$