EDIT to make +
active only in math mode, using egreg's answer from Make Characters Active via Macro in Math Mode
When +
is active, I use a \discretionary
to allow the breakpoint where desired.
The MWE shows
it making a break at the right point when it hits the margin. Further, the terms are properly nestled to the margin boundary,
it gives proper math spacing when not making a break
the math-active +
does not screw up the use of +
for dimensioning.
Here is the MWE.
\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor,etoolbox}
\makeatletter
\newcommand{\DeclareMathActive}[2]{%
% #1 is the character, #2 is the definition
\expandafter\edef\csname keep@#1@code\endcsname{\mathchar\the\mathcode`#1 }
\begingroup\lccode`~=`#1\relax
\lowercase{\endgroup\def~}{#2}%
\AtBeginDocument{\mathcode`#1="8000 }%
}
\DeclareMathActive{+}{\mathbreak\std{+}}
\newcommand{\std}[1]{\csname keep@#1@code\endcsname}
\patchcmd{\newmcodes@}{\mathcode`\-\relax}{\std@minuscode\relax}{}{\ddt}
\AtBeginDocument{\edef\std@minuscode{\the\mathcode`-}}
\makeatother
\textwidth 1.75cm
\parindent 0pt
\parskip 1ex
\def\mathbreak{\discretionary{}{}{}}
\begin{document}
\hrulefill
\rule{1cm}{1pt}$ a + b + c + d$ \rlap{(broken spacing aligns to margins)}
$+ c$ \rlap{(for left-margin comparison)}
\mbox{\rule{1cm}{1pt}$ a + b + c + d$ \rlap{(unbroken spacing is proper)}}
Did + revert to original definition?\parskip=+30pt\relax
Yes it did
\end{document}

Now that I have tested the approach to my satisfaction, here it is in a more general setting:
\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\makeatletter
\newcommand{\DeclareMathActive}[2]{%
% #1 is the character, #2 is the definition
\expandafter\edef\csname keep@#1@code\endcsname{\mathchar\the\mathcode`#1 }
\begingroup\lccode`~=`#1\relax
\lowercase{\endgroup\def~}{#2}%
\AtBeginDocument{\mathcode`#1="8000 }%
}
\DeclareMathActive{+}{\mathbreak\std{+}}
\newcommand{\std}[1]{\csname keep@#1@code\endcsname}
\patchcmd{\newmcodes@}{\mathcode`\-\relax}{\std@minuscode\relax}{}{\ddt}
\AtBeginDocument{\edef\std@minuscode{\the\mathcode`-}}
\makeatother
\def\mathbreak{\discretionary{}{}{}}
\usepackage[nopar]{lipsum}
\begin{document}
\lipsum[4]. And now we will demonstrate the breaking ability
$a + b + c + d$ of the method. And here, $a + b + c + d$ when not broken.
\end{document}
