Hi Werner,
Here is a way to do it if args and body are converted to strings. Quite clumsy, not very generic, and probably easy to break.
ClearAll[makeFunction, funcX, x, y]
makeFunction[name_String, args_String, body_String] := ToExpression[name <> "[" <> args <> "]:= " <> body]
name = "funcX"; args = {x, y}; body = (x + y)^2;
argsString = ToString[#] <> "_" & /@ args // StringRiffle[#, ", "] &;
bodyString = TextString@body;
makeFunction[name, argsString, bodyString]
funcX[1, 2]
(* 9 *)