Eu sei um pouco sobre FORTH, então vou me limitar a isso. É uma linguagem de baixo nível, oferecendo a você como programador acesso a todos os recursos de hardware. Então você pode fazer o que quiser.
Concorrência
Para ter programas paralelos (edit: costumava dizer programas concorrentes reais), você precisa de pelo menos duas unidades de execução (CPU-s). Seria bastante trivial implementar uma palavra em FORTH dizendo, como exemplo, "execute esta palavra no processador 2 usando esses dois argumentos". A palavra alocaria as duas pilhas necessárias no processador 2 e começaria a executar a palavra. Você precisaria se restringir um pouco exatamente às construções que você pode usar nesse programa.
Se o número de programas simultâneos for maior que o número de unidades de execução, você deverá procurar programas "pseudo-paralelos". Basicamente, existem duas maneiras de fazer isso: corotinas ou multitarefa preemptiva. De qualquer forma, é possível (não fácil, mas bem descrito na literatura) como conseguir isso e o FORTH permite acessar todas as coisas de baixo nível necessárias.
Avaliação preguiçosa
Claro que você pode fazer isso no FORTH, como em praticamente qualquer linguagem de programação. Não será tão elegante ou "embutido" como em Haskell. Vou usar um exemplo muito ingênuo.
A idéia é que você defina uma "função" (usada livremente aqui) que retorne um conjunto de coisas. Um exemplo seria uma função que retorna todos os números inteiros. Você faz operações neste conjunto e, quando terminar, fornece o resultado. Como exemplo, você pode querer somar todos os números inteiros até que a soma seja maior que 1000. Uma avaliação não preguiçosa alocaria primeiro todos os números inteiros como um conjunto, o que é impossível, pois há um número infinito de números inteiros. Começaria então a trabalhar neste conjunto. Uma implementação lenta teria uma maneira de "fornecer o próximo valor no conjunto". Fazer isso realmente precisa apenas de uma variável na função "last value give".
Haskell faz as coisas dessa maneira. Obviamente, ele lida com situações mais complicadas, mas a idéia é a mesma. Ele reveste a avaliação de uma maneira que permite que você como programador se concentre no problema, não em como resolvê-lo.