宣言型っていうけど、どこかで命令型のプログラムが動いていてそれに処理を丸投げしてるに過ぎないはず。
宣言型のコードだけで処理が動くことは絶対にないので、
宣言型と命令型の2択のように対立軸として考えるのは間違いだと思う。

命令型のコードは素直に処理が追えるが、宣言型はコードを読んで処理を追うのが非常に難しい。書くのはそりゃ楽かもしれないが、解読するのは簡単ではないし、フレームワークやライブラリへの依存が激しい。デバッグも微修正するのも困難になる。
宣言が何を意味するのかマニュアルを読んで規約を覚えるのも面倒。