You can use the openwith package for configuring associations of file types with external applications. This then opens the files in the defined applications and works for
dired, and naturally also for
C-C C-o in org-mode. The associations are defined in a list of lists (q.v. documentation of the
openwith-associations variable). E.g. here are my settings for my ubuntu installation.
(("\\.pdf\\'" "evince" (file))
("\\.mp3\\'" "xmms" (file))
("\\.\\(?:mpe?g\\|mp4\\|MP4\\|avi\\|wmv\\)\\'" "mplayer" ("-idx" file))
("\\.odp\\|\\.odt\\|\\.doc\\|\\.docx\\'" "libreoffice" (file)))
Openwith is available from MELPA.
Relative links in org mode then work easily, e.g.