OSPF two layer hierarchy requires that every non backbone area must connect to backbone area to be able to communicate with other areas.
Virtual link is a link that allows discontiguous areas 0 to connect together. Or to to connect non backbone area to backbone area via transit area. The OSPF virtual link feature should be used only in very specific cases, for temporary connections. The area via which virtual link goes is called transit area. Virtual link cannot go through more than one area or through stub area. If you need to use virtual link through two areas you must you two virtual links. The LSA learned through virtual link do not age, so it doesnt refresh every 30 minutes. Why you cannot create from stub area transit area? Virtual link relies on routing done at transit area that is correct to reach destination.
The transit area cannot be a stub area, because routers in the stub area do not have routes for external destinations. Because data is sent natively (but ospf traffic is tunneled!), if a packet destined for an external destination is sent into a stub area which is also a transit area, then the packet is not routed correctly. The routers in the stub area do not have routes for specific external destinations.
Configuring OSPF virtual links
area area-id virtual-link router-id ? this is command to use for virtual link setup. You have to configure the same virtual link command at the second router.