SequenceSplit, Longest, Plus
==========
I think it's best to take advantage of the built-in [`SequenceSplit`](https://reference.wolfram.com/language/ref/SequenceSplit.html) and ask for the [`Longest`](https://reference.wolfram.com/language/ref/Longest.html) pattern with the [`Condition`](https://reference.wolfram.com/language/ref/Condition.html)(`/;`) that it adds up ([`Plus`](https://reference.wolfram.com/language/ref/Plus.html)) to less than 20 (`<20`).

 SequenceSplit[alist, {Longest[a__]} /; Plus[a] < 20 :> {a}]

It's reasonably short and idiomatic and doesn't create any lingering definitions. I am looking forward to seeing various other answers. Nice question!

Performance 
---

This is rather slow for long lists, measuring with [`AbsoluteTiming`](https://reference.wolfram.com/language/ref/AbsoluteTiming.html) at various lengths.

 ListPlot[
 Table[
 {l, First@AbsoluteTiming[
 SequenceSplit[
 RandomInteger[{1, 10}, l]
 , {Longest[a__]} /; Plus[a] < 20 :> {a}
 ];
 ]
 }
 , {l, 10, 1200, 50}
 ]
 , PlotTheme -> "Scientific"
 , FrameLabel -> {"List length", "Time [s]"}
 ]

[![enter image description here][1]][1]

This is in a rather old i7-4770 CPU @ 3.40GHz
 


 [1]: https://i.sstatic.net/Vrm04.png