What is the difference between a DSL and an API, btw? I was wondering about that lately. Except that you can make the DSL look a bit prettier in theory, aren't they basically the same thing?
An API is a list of functions you can call. An embedded language (aka DSL) is a programming language adapted for a particular domain, and a programming language is more than a list of functions. It might include special types of iteration, or special syntax. It might even change the whole model of how a program is expressed, e.g. if you wrote purely declarative data-flow language for network simulations.
A domain-specific language (DSL) is a programming language or executable specification language that offers, through appropriate notations and abstractions, expressive power focused on, and usually restricted to, a particular problem domain.