Programming Languages are in fact Human Computer Interfaces and should be treated as such. The design of a DSL should match the thought patterns of the domain experts in a way that creates as little cognitive dissonance as possible. The result should be that a DSL can become a systems interface point between domain experts, programmers, and systems of systems themselves. We are already seeing this. We will continue to see this. The at the very tip of this idea are the DSL which Java and Groovy make so simple to build.
Programming is a human activity that occurs on multiple levels of thought. Thought tools assist in thinking. We call these metaphor. Why shouldn't programming language tools also help assist programming. The framework level language should therefore be used to create as thoughtful and targeted a set of metaphors for the application level programmer... who in turn is creating tools for the problem-domain experts to use.