Each has to define what it means by that. But overall I'd say create a new syntax, usually through metaprogramming .
Mechanisms can be simpler, from the C preprocessor to Highly sophisticated macros that can even wrap compiler .
It is very common for these languages to be appropriate for DSLs . An example .
In general this is very problematic and usually pees in the hand of someone who is not very good at dealing with all complexity. Programming language explodes in possibilities of combinations. Since "small" I wanted to make such a language, today I know how this is almost unviable for a product that goes beyond a very specific niche or academic research.
Some languages force the bar saying that they are extensible because it can extend something, but little.
There are declarative languages that are already DSLs that allow the creation of new declarations in a simple way. Although some of them are extensible by definition, I have not seen anything official indicating that they are considered "extensible languages", so although the term fits, it is used in a different context.