This is a valid concern - it's understandable to keep smart devices on guest network, but then their local connection to other devices/computers on host network will mostly fail (depending upon firewall and use of broadcasts by the devices).
Here is how I was able to get around this on dd-wrt. There are multiple steps and couple of alternatives.
Here I'm assuming that the smart devices are on guest network and they need to be able to be discovered by and communicate with machines on the host network... but reciprocal setup is also possible using the mechanisms described below.
First we need to configure host/guest boundary. Use iptables to block all NEW packets coming from guest to host (or at least from the smart devices), but allow ALL packets to go from host to guest. This way any communication started by host (to guest) will be allowed but not vice versa. This should be a safe enough arrangement.
Many smart devices let others discover themselves using broadcasts, and the problem is that broadcasts are not relayed between subnet/interface boundaries as a rule. So even if we configure iptables to allow broadcasts from guest to host (or, say, open all traffic between guest and host networks), device discovery will not work.
So, if we can somehow find a mechanism to forward the broadcasts from the smart devices to our host-network machines like phones/computers, the machines will reply to individual devices, connections will be established and communication will work.
I was able to find two ways to do this and am explaining those below (for more details, see my answer on the dd-wrt forum).
bcrelay
This is a very simple utility that happens to be there on dd-wrt as well :).
As the name suggests, it simply reads broadcast messages from one interface, and sends them out to another interface. Doesn't have many options, but at least it can run as a daemon.
With this I was able to relay the broadcast messages coming from the devices on my guest network to the machines on my host network, and the machines were able to discover the devices and communicate with them. But I eventually settled with samplicator as explained below.
samplicator
https://github.com/sleinen/samplicator
This is an interesting tool that can receive UDP datagrams on a given port and send them to a set of receivers. I found which ports are being used by the devices for sending broadcasts and then I ran samplicator on a spare Linux machine on those ports. samplicator started sending those packets to targeted devices I specified in its config file.
In the meantime, in iptables, I allowed NEW packets from guest to host on only those ports (and only to targeted devices).
Thus these packets are now able to reach their target hosts and the communication picks up. One good thing in using samplicator is that I'm not sending unnecessary broadcasts to host network (such as DHCP)!
I've omitted a few details here. One of these ways should work in the cases such as described by you.