Tem que ver exatamente de quais críticas ou elogios vc está falando. Mas enfim...
Basicamente, um Design Pattern é uma descrição de uma solução reusável para um problema conhecido ("se vc tem uma situação XYZ com tais características, uma possível solução é fazer A, B e C desta forma").
O problema - como acontece com praticamente tudo na nossa área - é o abuso ou uso errado. É achar que um DP é solução universal e tentar aplicá-la pra tudo, inclusive nos casos em que ela não é a melhor solução.
Foi essa a crítica que vc viu? Pois pra mim é o principal problema. Perceba que não é o DP em si, e sim quando usam de forma errada.
Nenhuma tecnologia é solução universal, tudo depende do contexto. Tem casos em que é adequado, em outros casos piora as coisas, e tem casos em que tanto faz.
O que os DP fazem - pelo menos é assim que eu vejo - é no máximo sugerir que, para a maioria dos casos em que seu problema se assemelha à descrição do DP, a solução proposta se mostrou bem adequada. Mas não é uma lei sagrada que deve ser seguida cegamente pra todos os casos.
Como sempre, tem que avaliar o contexto. E pra avaliar bem precisa conhecer as opções, os prós e contras de cada uma e só aí decidir. Nenhum DP é obrigatório, vc usa se o seu caso e contexto indicar que precisa. Vc identifica o problema e aplica a respectiva solução, o ruim é quando fazem o contrário (tentar encaixar um DP de qualquer jeito, mesmo quando ele não serve).
Isso vale pra tudo, seja SOLID, clean code ou seja lá qual for a moda atual ou futura. Sempre depende.
Sobre só ser útil em C++ e Java, meu chute é que isso é um efeito colateral do famoso livro do GoF, que fez muita gente acreditar que DP só é possível em linguagens orientadas a objeto - o que não é verdade, dá pra implementar até em C, por exemplo.
Enfim, é isso. Não gosto desses "mantras" absolutos do tipo "sempre faça" ou "nunca use". Salvo raríssimas exceções, o ideal é analisar caso a caso, levando em conta as circunstâncias específicas e os prós e contras de cada solução.