A fuzzing harness is a test case or a particular test target. This blog post defines a harness as an "entry point executable". When you want to fuzz input that is not reachable from the command line you need to write a new testing harness.
For example, if we wanted to assess the security of a client/server application, a testing harness would need to perform many actions, like starting the server process prior to sending network input from a client connection. Or if we wanted to fuzz test the inputs of functions in a DLL (loaded library), since there is no entry point defined we would need to write a testing harness to pass input from the command line into DLL functions.
This blog post goes through an example of writing a test harness to take input from a file and then pass that input to a vulnerable function that we want to fuzz.
There is also a glossary of fuzzing terms here.
Thanks to Marco Falke for answering this question on IRC.