I'm afraid that DNS-to-IP-set based filtering has some loopholes in its design.
If you get a different reply every N minutes, the actual TTL could be even smaller, and you need to update even more often, perhaps once a minute, since there's always a chance that you do not update often enough.
However, if you update too often, it will result in a flood of meaningless DNS traffic as most domains likely do not need frequent updates.
On the other hand, the reply may be unrelated to TTL and instead just return a limited set of addresses from the pool on each N-th query, so it would require to block entire subnets probably by ASN.
In this case, populating IP sets dynamically with dnsmasq looks like a more reasonable approach.
Another major issue is resilience to reboots and power outages, so the faster you populate IP sets at startup, the sooner your setup becomes ready, and in this context there's no point to rely on runtime configuration that can be reset at any moment.
It could be a different story on a general purpose system with persistent data storage not affected by flash wearing, but OpenWrt has its own specifics that we need to consider.