This is a big issue for our poor embedded developers. We are used to
create "low-level" software that are near the hardware, but now the big
part of the software is composed by "high-level": software that runs on
24h 7/7 connected servers (backend) and software that runs on powerful
usually connected device, mostly mobile (smartphones, tables, desktop PCs).
It's difficult to have in a single person all the skills needed to
create a global IoT system, from the embedded devices to mobile
frontends, passing by backend services.
Moreover, if 90% of embedded systems are similar (for example, most of
them run software written in the C language), high-level software can be
created with a multitude of technologies and commercial/free services.
If this isn't a commercial consumer product, I think I will end up with
your last solution: a local web server exposed to the Internet. A stanrd
ubiquitous web browser running on a desktop or mobile device can be used
as the frontend.
If you are creating a commercial product, you can't use a local
web-server, you need a Cloud system and a modern branded mobile app.
There are many technologies for this kind of systems, both for Cloud
(backend) and for mobile apps.
Anyway I don't think you can find all these skills in a single person,
mainly if you want to create a reliable system.