Header files contain function declarations and macro definitions that can be included in C programs using the #include preprocessor directive. They allow code and declarations to be reused across multiple source files. There are two ways to include header files - using angle brackets to search system directories and quotes to search the local directory. The #include directive works by having the preprocessor scan the header file before compiling the rest of the source code. Header files can be included once or multiple times conditionally to avoid errors.