Here is an attempt.
ClearAll[nTerm]; nTerm[t_] := If[MatchQ[t[[1]], Times[-1, _]], -t, t]
designed to be displayed above the list; takes one element (list) as input, replaces it with negative if the first element has a negative sign. So, nTerm[-a + b + c] gives a - b - c , which remains invariant on nTerm : nTerm[a - b - c] returns its argument.
Further
ClearAll[removeElements]; removeElements[lst_] := DeleteDuplicates[lst, (
takes a list as an argument, removes those list items that can be obtained from another list item by negation: removeElements[{1, 2, 3, -2, a, -a, "GWB", -"GWB"}] gives {1, 2, 3, a, "GWB"} (!). Finally,
ClearAll[processList]; processList[lst_] := removeElements[nTerm /@ lst]
applies the entire lot to the input list; thus li = {a + b, c + d + e, -a + b, a - b, -c - d - e}; processList[li] li = {a + b, c + d + e, -a + b, a - b, -c - d - e}; processList[li] gives {a + b, c + d + e, a - b}