By default VNET peerings are not transitive, as you already know. Setting up a VPN Gateway to do the routing between spokes in your hub-and-spoke setup is expensive and capacity-limited and cumbersome to set up.. I think there are better solutions to achieve the transitive communication:
Create a mesh network, by peering all spokes directly
use Virtual Network Manager (https://learn.microsoft.com/en-us/azure/virtual-network-manager/overview)
Use Azure Firewall to route all allowed traffic
If you want to know more about network manager, see this excellent video: https://www.youtube.com/watch?v=qNn83S55WHQ