The patch utility is a POSIX utility, and the Rationale section in the standard specification of the utility gives an example of the usage of the -p option:
The -p option makes it possible to customize a patch file to local user directory structures without manually editing the patch file. For example, if the filename in the patch file was:
/curds/whey/src/blurfl/blurfl.c
Setting -p 0 gives the entire pathname unmodified; -p 1 gives:
curds/whey/src/blurfl/blurfl.c
without the leading <slash>, -p 4 gives:
blurfl/blurfl.c
and not specifying -p at all gives:
blurfl.c
The OpenBSD manual also has a similar but slightly expanded example of when using -p may be useful (my emphasis):
-p strip-count, --strip strip-count
Sets the pathname strip count, which controls how pathnames found
in the patch file are treated, in case you keep your files in a
different directory than the person who sent out the patch. The
strip count specifies how many slashes are to be stripped from
the front of the pathname. (Any intervening directory names also
go away.) For example, supposing the file name in the patch file
was /u/howard/src/blurfl/blurfl.c:
Setting -p0 gives the entire pathname unmodified.
-p1 gives
u/howard/src/blurfl/blurfl.c
without the leading slash.
-p4 gives
blurfl/blurfl.c
It goes on to say:
Not specifying -p at all just gives you blurfl.c, unless all of
the directories in the leading path (u/howard/src/blurfl) exist
and that path is relative, in which case you get the entire
pathname unmodified. Whatever you end up with is looked for
either in the current directory, or the directory specified by
the -d option.
That is, if you're given a patch with absolute paths to the files that it applies to, and you keep those files in a different directory, then you may use -p with the appropriate number to "offset" the paths in the patch from the directory specified by -d (or the current directory).