Functions in C can be defined by the user or come from standard libraries. User-defined functions must be declared with a name, return type, and parameters. Functions are called by passing actual arguments which are assigned to formal parameters. Arguments can be passed by value, where copies are used, or by reference, where the function accesses the original variables. Recursion is when a function calls itself, reducing the problem size each time until a base case is reached.