This seems to be more of a service discovery problem, rather than a routing problem. Discovering services and their associated IPv6 addresses is a common networking problem.
One quick solution is to assign a static IPv6 address to the border router's Thread interface and hard-code that address in your devices.
An alternative solution is to have the border router advertise the service within the Thread Network Data, using the
otServer* APIs. This would allow your devices to dynamically discover the IPv6 address(es) associated with your service.
If you have a DNS server, you could also use that, along with OpenThread's
DNSv6 APIs for issuing queries.
Of course, you could also develop your own custom solution at the application layer. For example, having the border router periodically multicasting a message that indicates the IPv6 address(es) of your service.
Hope that helps.
--
Jonathan Hui