I understand that socat is described as a "more advanced" version of netcat, but what is the actual difference?
Would it be correct to say that everything you can do in netcat you can also do in socat? What about the opposite (everything you can do with socat can also be done in netcat)?

Very (very, very) simply put, netcat is a telnet that you can use in scripts. Plus is can be used as a simple listener if you want. And yes socat can do more stuff than netcat, but to verify whether it is a superset, you need to compare command line options.