> there are possibilities of various sophistication. A simple approach
> for just expl3 would be something like \ActivateExplCode
> \DeactivateExplCode where the latter would simply hook into some
> core functions like the arg expansion mechanism, e.g., replacing
> \exp_args:No and a few others with a suitable error message when
> called. And \ActivateExplCode would \cs_set_eq:NN the orig
> definitions back. All you would need to do would be to select the
> right kind of code pieces to make this work.

But that \ActivateExplCode cannot be added to the LaTeX2e kernel,
isn't it? If I'm right on that, then in order to be usable with
LaTeX2e, new documents would still need to explicitly
\usepackage{expl3}. In order to enforce that, we can do the
following.

- The LaTeX2x format contains all the definitions of expl3, but at the
end, it saves and undefines every experimental command that does not
contain either : or _ in its name.

- The package starts by checking what format called it. If it is
LaTeX2e, then all definitions are made as currently. Otherwise, the
saved definitions are restored.

The idea is that once \ExplSyntaxOn is undefined, the user cannot
access most of the experimental features (except by manually changing
catcodes, but that's harder than writing \usepackage{expl3}, so
hopefully, people won't do that). Of course, as Frank mentions,
meaningful errors are better, so the LaTeX2x format can define each
user command to be

\PackageError{expl3}{Package not loaded.}{You need to write
\string\usepackage{expl3} in your preamble to use the experimental
features.}

On the other hand, if the LaTeX2e kernel _can_ be modified, then e.g.
\ExplSyntaxOn could be defined to do
\usepackage{expl3}\ExplSyntaxOn by LaTeX2e.

A list of macros with no _ nor : in their name (only those documented
by \begin{function}{...} in the implementation part of a l3....dtx
file, and I'm not sure of my script).

% from l3names
\ExplSyntaxOn
\ExplSyntaxOff
\ExplSyntaxNamesOff
\ExplSyntaxNamesOn
\ProvidesExplFile
\ProvidesExplClass
\ProvidesExplPackage
\filedescription
\fileauthor
\filetimestamp
\fileversion
\filedate
\filenameext
\filename
\GetIdInfo

% from l3chk
\traceoff
\traceon
\tracingoff
\donotcheck
\absolutelytracingall
\tracingall

% from l3precom
\dumpLaTeXstate

% from l3calc
\stepcounter
\setcounter