Unter anderem genau dafür gibt es das Paket [`threeparttable`](http://www.ctan.org/pkg/threeparttable):
\documentclass[captions=tableabove]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{threeparttable}
\begin{document}
\begin{table}[htb]
\begin{threeparttable}
\caption{Die Beschriftung dieser Tabelle ist sehr lang! Sie ist so lang, dass sie breiter als die Tabelle selbst ist.}
\begin{tabular}{lll}\hline
ABC & XYZ & Foo \\
XYZ & ABC & Foo \\ \hline
\end{tabular}
\end{threeparttable}
\end{table}
\end{document}
Für Abbildungen bietet das Paket ebenfalls eine Umgebung. Siehe dazu die Anleitung zum Paket.
Wenn man mit Tabellenüberschriften arbeitet, sollte man diese übrigens mit Hilfe von `caption=tableabove` (siehe oben) oder `\captionabove` statt `\caption` auch entsprechend formatieren.
Im Beispiel ist es übrigens nicht vorteilhaft, dass die Tabellenüberschrift mit hängendem Einzug gesetzt wird. Auch das kann man bei der KOMA-Script-Klasse `scrartcl` (mit `\setcapindent`) ändern. Ebenso könnte man bei `KOMA-Script` KOMA-Script im Beispiel `captionbeside` statt `threeparttable` verwenden und den Tabellentitel neben die Tabelle statt über sie setzen. Sie Siehe zu all dem die KOMA-Script-Anleitung oder das KOMA-Script-Buch.