High Unrestored log on secondary database mirror server
We have a high value of unrestored log on secondary side where value keep ranging from 5-10 GB as monitored.

That's definitely a problem even in high performance (async) mode.

Simultaneously we have a job to create snapshot on this mirror [for reporting] server every 30 minutes which completes within a minute when unrestored is within MB's but keep running for 2-3 hours with high value of unrestored log
Could someone explain why the snapshot job is running that long or how to find it and fix high unrestored value?

Creating a snapshot of a database causes the snapshot to run recovery - just as if you were to start up any database in SQL Server. Since there is 10 GB of log to go through... it's going to take a while to run recovery. Pair that with adding of more log to an already behind database and you have yourself a great recipe for never catching up and always being behind.
From BOL: Uncommitted transactions are rolled back in a newly created database snapshot because the Database Engine runs recovery after the snapshot has been created (transactions in the database are not affected).