User-defined functions allow programmers to break programs into smaller, reusable parts. There are two types of functions: built-in functions that are predefined in C like printf() and user-defined functions created by the programmer. A function is defined with a return type, name, and parameters. Functions can call other functions and be called from main or other functions. Parameters can be passed by value, where the value is copied, or by reference, where the address is passed so changes to the parameter are reflected in the caller. Functions allow for modularity and code reuse.