How would a function FunctionQ look like, maybe in a way I can even specify the number of arguments allowed?
FunctionQ
Here's something quick and dirty which may do what you need:
FunctionQ[x_] := Head[x] == Function || DownValues[x] =!= {}