["Helping to manage large-scale, complex programming jobs like the one in which my friend is involved is the primary value of OOP."] This is true. Come to think of it, pretty much all paying programming these days is large-scale complex programming in teams. Huh. Maybe its not so worthless after all.
The trick is to use the database for most of the inter-task communication rather than wods of objects with pointers. That is how you make large projects into lots of smaller projects.
As far as copy-and-paste, that is one thing he didn't copy from me. However, it is often the easiest form of reuse, at least in the short run, because you don't have the burden of trying to make the Ultimate Generic Thing. But I have not seen an example where OO obviously creates more reference-based reuse either. Reuse has kind of fallen out of favor as the major selling point of OO among many OO proponents.