Section 2.3.1 of the document you linked details how you can send things to the kernel.
The main point here is that you can send a function definition like you send any other Mathematica input. I doesn't matter that it's a function definition. It's just an expression like any other. If you send as an expression, remember its full form: SetDelayed[F[Pattern[x, Blank[]]], Power[x, 2]]
You can send things to the kernel for evaluation in two ways: either as a string or as an expression. Sending as a string is going to be far easier if you know beforehand what you want to send.
There are two ways to send something as string (shown in section 2.3.1 again):
MLPutFunction(link, "EvaluatePacket", 1);
MLPutFunction(link, "ToExpression", 1);
MLPutString(link, "...");
MLEndPacket(link);
or more directly:
MLPutFunction(link, "EnterTextPacket", 1);
MLPutString(link, "...");
MLEndPacket(link);
.tm
file. $\endgroup$