Both LuaTeX and XeTeX are UTF-8 engines for processing TeX documents. This means that the input (.tex files) can contain characters that with pdfTeX are difficult to use directly. Both can also use system fonts, again in contrast to pdfTeX. However, the two are very different in approach.
XeTeX uses system-specific libraries to work. This means that it is very easy to use 'out of the box' for loading system fonts and other UTF-8 tasks. Indeed, it was written for this purpose: supporting languages, etc., that traditional TeX struggles with. This makes for an easy to use engine for end users, particularly if you use the fontspec package on LaTeX. However, because things are 'farmed out' to the OS, there is a trade-off in flexibility terms.
In contrast, LuaTeX has bigger aims. The idea is to add a scripting language (Lua) to TeX, and to open up the internals of TeX to this language. The result is that a lot is possible, but it has to be programmed in.
The flexibility that Lua offers in LuaTeX means that it's the better choice of engine to choose today (2025). It's also notable that XeTeX is (essentially) no longer maintained - yes, the build system still runs to make binaries, but there's no real chance of improved features.
(In the past, XeTeX was better with some scripts, but since HarfBuzz was integrated into LuaTeX, that's no longer the case.)
ConTeXt is not an engine, and so is in a slightly different place here. ConTeXt is a format for TeX, like LaTeX, but is newer and much larger. ConTeXt Mark IV is a LuaTeX-only implementation, and Mark XL uses LuaMetaTeX (which took LuaTeX, removed things not needed by ConTeXt and added additional features).
\usepackage[utf8]{inputenc}work?inputencpackage unfortunately is very incomplete and in some circumstances it doesn’t work at all (e.g. in combination with fancyvrb, since their verbatim parsing somehow disables UTF-8 character code parsing).