the word 'subjob' is normally used to denote a set of nested components (indicated by the blue box)-- a joblet can be a part of a subjob, an external job called by a tRunJob is not. I am assuming that you mean the difference between a joblet and an external job called with tRunJob.
The major difference is in how the code is generated. as a rule of thumb, you can think of executing a joblet as adding the components directly in the job father- while a job called by a tRunJob is executed by calling an external jar.