Well, I am not sure why this would be too difficult, but for starters:
look at page 86 or so of Universal Routing 7 Deployment Guide. That would give you a really good start on quite a few different ways of getting this done.
It seems to me you have a multi-tier call flow here, thus I would start by creating a VQ for each service. Then I would use SetVQPriority to define the calls place within the queue. As long you have separate queues for each service targeting same agents, you will be able to adjust routing accordingly.
Another one worth playing with would be use_service_objectives and PriorityTunning. I know some people would raise their eyebrows on this one, but if you really think about, what you are talking here is multi-tier service objectives.
The great thing about ServiceObjectives is that it allows you to SCALE the priority of the call based on the time it has waited. Furthermore, you can use PriorityTunning to ensure that URS takes your VIP call as the very first one. Just create Service Objectives of 3600, 4200, and 4800 for the other ones, and your VIP calls would ALWAYS be placed first. Combine that with KeepQueue functionality, and you will be able to prevent other calls from being routed even when you have to play some sort of compliance message before routing it to the agent. I would think twice about KeepQueue functionality, but it is definitely a fun thing to try.
Gosh.... this is just of the top of my head. Of course, you can do wonders if SelectDN as well, but I would just keep it down to pretty icons with as little of f(x) icons as possible.
Vic