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.