Ich möchte keinesfalls die Leistung von @IjonTichy schmälern, aber ich persönlich find alle Lösungen nicht gut. Entweder muss man von Hand `€` zu `\euro` ersetzen oder man hat "active characters" im Dokument, was eher zu vermeiden, da es leicht zu seltsamen Problemen führen kann (im Fall von `€` eher weniger, aber Vorsicht ist besser als Nachsicht).
Deshalb präsentiere ich zusätzlich eine Lösung mittels des Pakets `newunicodechar`. Mittels `\newunicodechar{€}{\euro}` kann ich die Substitution einsetzen. Das Paket funktioniert übrigens mit allen Engines. Wichtig ist, dass Paket und der Aufruf `\newunicodechar{...}{...}` **NACH** der Schriftauswahl stehen muss.
\documentclass{article}
\usepackage{ifluatex}
\usepackage{eurosym}
\ifluatex
\usepackage{luatextra}
\setmainfont{XCharter}
\else
\usepackage[utf8]{inputenx}
\usepackage{XCharter}
\fi
\usepackage{newunicodechar}
\newunicodechar{€}{\euro}
\begin{document}
XCharter ist eine schöne Schriftart aber leider hat sie kein "€"-Symbol.
\end{document}
> ![alt text][1]
[1]: http://texwelt.de/wissen/upfiles/u_172.png