Elisp isn’t just a programming language it’s an execution environment and it doesn’t make a lot of sense to consider them separately.
For example the largest abstraction in elisp is the buffer. A lot of core language features revolve around and are greatly modified by the buffer. For example variable bindings can typically be overrides in buffer-local variables.
Furthermore there’s a lot of editor specifics that are interesting. Text properties are the least of which. Buffer narrowing is another. But what about… fields? Judicious use of fields limits where you can type into a buffer. Consider the customize user interface for example.
Basically emacs is a complete tui development environment.
Oh boy yet another treemacs question!