O principal ponto da minha crítica é que não é deixado claro que estruturas de controle, procedimentos e orientação a objetos estão relacionados a uma forma específica de programar. Fui ensinado na faculdade que lógica de programação era basicamente o paradigma imperativo. Quando me deparei com outras formas de pensar ou fui para algo mais teórico perecebi que era mais complexo que isso.
Como Análise e Desenvolvimento de Sistemas é um curso a nível tecnólogo, que em tese, serve para formar mão de obra e não necessariamente cientistas como na Ciência da Computação, é justificavel que se assuma um olhar mais pragmático e ensine apenas o paradigma imperativo, pois como você mesmo disse, é de longe o mais popular, mas, mesmo que pragmaticamente digamos que ao saber o paradigma imperativo se programa em qualquer linguagem, há pessoas que acreditam nisso de forma literal, e que teoricamente todas as linguagens se resumem a ele. Evitaria muita confusão e promoveria um olhar teórico muito mais sólido se fosse deixado claro que o que se está aprendendo é a lógica do paradigma imperativo.
Percebo que em linguagens impertivas, mesmo que meus amigos consigam usar o mínimo de lambda, ainda acaba por ser um ponto de dúvida e a maioria não consegue produzir códigos mais elaborados justamente por não entender que é outra forma de pensar. Hoje em dia todo mundo se beneficiaria pelo menos um pouco do estudo da programação funcional.