I think the best way to do this is to setup a Wireguard VPN server on the router itself or on a machine in the LAN. The router firewall will block everything inbound(tcp/udp) except to the inbound VPN udp/IP/port.
Then on the client side you setup a Wireguard client that connects to your Wireguard server remotely and access the LAN resources from there.
It seems your main problem is with dynamic prefix assignment by your ISP. With this alone it is hard todo what you want reliably. There's 3 options you can opt for:-
Bug your ISP to hand you a static prefix. (/56, /60)
Use a tunnel broker(HENET)
Setup a Wireguard VPN on Linode and route that to your home. You get a fixed /56 from them.
Nothing else I can think of. Good luck.