手続き型の最大の特徴は時系列とプログラムが一体成型だと言うことだと思う。プログラムの走行に関して時間軸が存在する(要するに上から順に実行していくのが基本になっている)のが手続き型の特徴と思う。
関数型の特徴はモノをいれると別のモノに変換する函を使ったプログラム、同じものを入れれば必ず同じものが出てくる、それ以外に機能が無いというのが特徴という普通の考え方が最もそれらしいと思う。
関数型等の非手続き型の言語は時系列が基本的に存在しない事(と思う)、少なくとも純粋に関数型を考えるならば、実行順所は決めるべきでないと思う、
当然手の込んだライブラリーを作ったりモナドとかで時系列を無理やり作り出さないと入出力等の時間的な順序が問題になる物が実現できない。
それが嫌なら、副作用を入れて妥協するしかないのだと思う。妥協しないとHaskellみたいになるんだと思う。
副作用等を持っていても、ポリシーが関数型でプログラムをしたいと考えて、その中での妥協なら
それは関数型言語といってもよいと思う。lispが関数型で無いという人はいないと思うし。