"Serve Expired" works both in forwarding and resolver mode.
Let's say, instagram.com has a DNS TTL (time to live) of 300 seconds. So, this record can live in cache for 300 seconds and it is served to clients for this amount of time.
With unbound and pfsense, you can manipulate this behaviour in 2 ways:
1. you can check Serve Expired option, so this record will stay forever in cache and will be updated when a client asks for it.
So the client gets the expired answer really fast and afterwards unbound refreshes the record in the background.
2. You can change the value in "Minimum TTL for RRsets and Messages" to whatever you want (don't push it over 3600 seconds though). In this way, you increase the time of small TTL so the records will live in cache longer. In our example, if you set the value to 600 seconds, the dns record will be served from cache for 600 instead of 300 seconds. I prefer this approach.
Serve Expired is more dangerous (because dns records can be irrelevant after some hours) but has an extra benefit. If the DNS server of a site is down and unbound cannot reach it to get an answer, you will still be able to access the site because you will always be served from cache.
For example, if the DNS server of instagram goes down, nobody will be able to access the site after 300 seconds, except from you.