Here is a first (!) proposal. It does some braces along arbitrary paths. The way it works is that there is recording phase, to which you pass the path. In this phase you can also specify keys. In the present version these are raise and mirror but this is up to negotiations. ;-) The second phase draws the brace. I added a simpleminded proposal but as before I will be happy to address constructive inputs that tell me how the appearance can be improved. Constructing a brace along the path you have in your MWE becomes as simple as saying
\path[record path] (0,0) to[bend left] (3,1);
\draw[brace];
BTW, if anyone is even thinking of making this a one-step procedure by employing \pgfextra (or something equivalent): PLEASE DON'T! If you have another way that is robust I am all ears. Here is the code.
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{decorations.markings}
\newcounter{bracep}
\begin{document}
\begin{tikzpicture}[record path/.style={/utils/exec=\tikzset{bent brace/.cd,#1},
decorate,decoration={markings,mark=at position 0 with
{\setcounter{bracep}{1}%\typeout{\pgfdecoratedpathlength}
\path(0pt,{\pgfkeysvalueof{/tikz/bent brace/scale}*\pgfkeysvalueof{/tikz/bent brace/raise}})
coordinate (bracep-\number\value{bracep});
\pgfmathsetmacro{\mystep}{(\pgfdecoratedpathlength-4pt)/int(1+(\pgfdecoratedpathlength-4pt)/2pt)}
\xdef\mystep{\mystep}},
mark=between positions 2pt and {\pgfdecoratedpathlength-2pt} step \mystep pt with {\stepcounter{bracep}
\pgfmathtruncatemacro{\itest}{
ifthenelse(abs(\number\value{bracep}*2pt/\pgfdecoratedpathlength-0.5)<1pt/\pgfdecoratedpathlength,1,0)}
\coordinate (bracep-\number\value{bracep}) at
(0,{\pgfkeysvalueof{/tikz/bent brace/scale}*(\pgfkeysvalueof{/tikz/bent brace/raise}+2pt+\itest*2pt)})
\ifnum\itest=1
node[transform shape,bent brace/nodes]{\pgfkeysvalueof{/tikz/bent brace/text}}
\fi;},
mark=at position 1 with {\stepcounter{bracep}
\coordinate (bracep-\number\value{bracep}) at (0,\pgfkeysvalueof{/tikz/bent brace/scale}*\pgfkeysvalueof{/tikz/bent brace/raise});}
}},brace/.style={insert path={plot[smooth,samples at={1,...,\number\value{bracep}},variable=\x]
(bracep-\x)}},
bent brace/.cd,raise/.initial=0pt,scale/.initial=1,text/.initial={},
nodes/.style={},node options/.code=\tikzset{bent brace/nodes/.append style=#1},
mirror/.code={\tikzset{bent brace/scale=-1}}]
\path[postaction={record path={text=stuff,node options={above,text depth=0.5ex}}},draw,ultra thin] (0,0) to[bend left](3,1);
\draw[brace];
\path[postaction={record path={raise=4pt}},draw,ultra thin] (3,1) to[bend left] (3,-2);
\draw[blue,brace];
\path[postaction={record path={mirror,text={more stuff},node
options={red,below}}},draw,ultra thin] (0,0)
to[bend right] (3,-2);
\draw[red,brace];
\end{tikzpicture}
\end{document}

The ultra thin paths are just to show the paths that get braced, and the code also has examples of some text above or below the center of the brace. Of course, one may want to combine this with decorations.text to bend the text as well.
brace. The only problem for me is that it do not follow the curve. And I don't know how to make a decoration that is a mixture betweenbraceandcurveto. – mefortex May 27 '19 at 17:16