Parameter wie `\clubpenalty` und `\widowpenalty` verhindern die einzeln stehenden Zeilen global und nicht nur bei Listen.
Streiche in deinem Code »[needspace](http://ctan.org/pkg/needspace)« und das dazu gehörige `\needspace{2\baselineskip}`, setze sowohl `\clubpenalty=\maxdimen` als auch `\widowpenalty=\maxdimen` in den Vorspann und schon hast du ein Beispiel.
Vorspann.
    \documentclass{scrartcl}
    \usepackage[ngerman]{babel}
    \usepackage{blindtext}
    \usepackage{forloop}
    \newcounter{items}
    \clubpenalty=\maxdimen
    \widowpenalty=\maxdimen
    \begin{document}
    \begin{enumerate}
      \forloop{items}{1}{\value{items} < 10}
        {\item \blindtext}
    \end{enumerate}
    \end{document}