It's not because of \section taking an argument (or multiple arguments) per se. It's because \section acts as an intermediate function before processing the arguments following it. In fact, in the standard document classes \section takes no arguments at all (from article.cls, but similar for scrartcl.cls):
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
As such, appending code to \section actually inserts it between functions that expect certain arguments which, as you've found out, causes problems. So, while \@startsection is defined to take 6 arguments and does above, it's actually \@sect (for numbered) and \@ssect (for unnumbered or starred) that sets the sectional title. Even further "down the line", \@xsect is called to set the after-heading functionality, so I've patched that below:

\documentclass{scrartcl}% http://ctan.org/pkg/koma-script
\usepackage{parskip}% http://ctan.org/pkg/parskip
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\begin{document}
\section{Introduction}% Original untouched \section
Here is some text.
\section{Introduction}% \section with manual modification
\vskip-\parskip
Here is some text.
\makeatletter
\patchcmd{\@xsect}% <cmd>
{\ignorespaces}% <search>
{\vskip-\parskip\relax\ignorespaces}% <replace>
{}{}% <success><failure>
\makeatother
\section{Introduction}% Modified \section after patch
Here is some text.
\end{document}
Since this modification is done on a macro called by all sectioning units, it will hold for all.
\documentclassare you using? And what about\subsections and other sectional units? – Werner Oct 03 '12 at 17:11scrartcldocument class and for other sectional units I would simply replicate the command. – platzhirsch Oct 03 '12 at 17:21