A distinção é profundamente significativa porque as linguagens compiladas restringem a semântica de maneiras que as linguagens interpretadas não necessariamente. Algumas técnicas interpretativas são muito difíceis (praticamente impossíveis) de compilar.
O código interpretado pode fazer coisas como gerar código em tempo de execução e dar visibilidade a esse código nas ligações lexicais de um escopo existente. Esse é um exemplo. Outra é que os intérpretes podem ser estendidos com código interpretado, que pode controlar como o código é avaliado. Essa é a base dos antigos "fexprs" do Lisp: funções que são chamadas com argumentos não avaliados e decidem o que fazer com elas (tendo acesso total ao ambiente necessário para percorrer o código e avaliar variáveis, etc). Em linguagens compiladas, você não pode realmente usar essa técnica; você usa macros: funções chamadas em tempo de compilação com argumentos não avaliados e converte o código em vez de interpretar.
Algumas implementações de linguagem são construídas em torno dessas técnicas; seus autores rejeitam a compilação como um objetivo importante e adotam esse tipo de flexibilidade.
A interpretação sempre será útil como uma técnica para inicializar um compilador. Para um exemplo concreto, veja o CLISP (uma implementação popular do Common Lisp). O CLISP possui um compilador que é escrito por si só. Quando você cria o CLISP, esse compilador está sendo interpretado durante as etapas iniciais da construção. Ele é usado para se compilar e, depois de compilado, a compilação é feita usando o compilador compilado.
Sem um kernel de intérprete, você precisaria inicializar com algum Lisp existente, como o SBCL.
Com a interpretação, você pode desenvolver uma linguagem do zero absoluto, começando pela linguagem assembly. Desenvolva as rotinas básicas de E / S e núcleo e, em seguida, escreva uma linguagem de máquina ainda avaliada. Depois de avaliar, escreva na linguagem de alto nível; o kernel do código da máquina faz a avaliação. Use esse recurso para estender a biblioteca com muito mais rotinas e escreva um compilador também. Use o compilador para compilar essas rotinas e o próprio compilador.
Interpretação: um importante trampolim no caminho que leva à compilação!