関数もまた、広い意味ではオブジェクトの一種です。
オブジェクトという言葉には「対象」という意味があります。処理や操作の対象となり得るもの、という理解で良いと思います。整数型の単一の変数も、配列も、ポインタも、関数も、メモリ上にある事には変わりなく、メモリを書き換える事が出来れば操作可能なため、広い意味では、全てがオブジェクトです。
しかし、C などの古い言語では、関数内部を実行時に書き換える事が出来ません。関数はあくまで処理記述であって、「処理対象」や「操作対象」ではない、という思想です。
オブジェクト指向を取り入れた C++ や Java では、関数をクラスに包み込めば、そのインスタンスをメモリ上に生成し操作する事が出来ます。これらはクラスをオブジェクトとして取り扱える言語だからです。ただし、関数そのものを書き換える事は出来ません。
そして JavaScript では考え方が更に進み、関数は実行可能なオブジェクト、という扱いになっています。つまり、JavaScript では関数を書き換えていく事が出来ます。
つまり、もともと関数もオブジェクトではあるのだけれど、関数をオブジェクトとして扱える言語は、最近になって出現してきた、と捉えれば良いのではないかと思います。
関数とは、何らかの引数(ない事もある)を受け取り、何かの処理をして、何かの値を返す(ない事もある)、一連の処理の事です。オブジェクトとは文字通り「もの」です。数字、true/false、文字列、null/undefined以外のJavaScriptに存在するものはすべてオブジェクトです。JavaScriptでは、関数もオブジェクトのうちに入ります。
【関数】 は 「 機能 」 です。
【オブジェクト】 は 「 実体 」 です。
マッタク異なります。