I haven't read the article Mr4thDimension posted, so I don't know if what I am going to say is redundant or not, but you could have each job have an array of dependencies. When the system finishes a job and needs to decide which one to start next, it could check a pending job to make sure all of the jobs it is dependent on have finished before inserting it.
There are some ups and downs to this system, but setting up the job chain becomes very easy to do and visualize in code.
The blog post is a follow up to an idea based on what you're saying. The author basically inverts the dependence, so instead of saying job B depends on job A, the system instead encodes job A permits job B. Then he sets up a thing where you declare your dependencies in the more natural way, and internally it inverts it to the permits system. It also explains why the permits system makes a superior job system.