A header file is just like a cpp file. It's just code. Plain text. Nothing more, nothing less. It's used by the compiler to make the actual program. I'd be very impressed if you could write a C++ program without any text files.
Frequently, we write code that we like to repeat in more than one source file. For example, we might write some function declarations. If we put these declarations in one file, we can then use the preprocessor directive #include to copy that text into some other text, making our own lives easier.
That's essentially it. We chose to do it because it makes our lives easier. There is nothing stopping you writing every program in one huge text file. It's just a lot more effort than doing it sensibly and splitting your code into separate files.