'Pure' EL is not something that can exist without resolvers. How do you think EL 'knows' where to get
#{myObject.variable}
The resolvers do all the hard/real work, in resolving the EL to an object. Multiple resolvers can (and usually will) be present. The EL expression will be passed on to resolvers in the order they resolvers are configured to see which resolver can actually... well... resolve the EL to an object. The first resolver that says 'I know go to resolve this' is allowed to.
EL comes with some built-in resolvers and frameworks can add/supply their own (JSF, CDI), so the chance that you need to create your own resolver is slim.
That way EL can take values from JSF or CDI beans (mixed), resource bundles, things put in any scope (request, session, ...)
One of the most well known 'additional/external' resolvers is the one from Spring. To be able to use Objects/beans configured/defined in Spring to be used in JSF, you need to configure their resolver in faces-config.xml and after that, it will be used.
See also: