I have been using a BangleJS 2 for the last year, and have quite liked it. There is a companion app, Gadgetbridge, to install on your phone, which is available through F-Droid (there is a Bangle-specific version of it, or a generic version that supports a bunch of other smart watches). There is also an app store (all free software) for apps that run on the Bangle itself. It includes a heart monitor, but no music streaming.
I've also been watching rePebble as they start making new Pebble smartwatches. I've never owned one, but a lot of people swear by them. They are now fully open source and have an app store. No idea if they can stream music.

This is exactly how I use Syncthing, and as the author says, it sure would be nice if more things were just files. Really, most things are stored locally as files, but not always in a way that plays nice with syncing. Like, I can sync my Firefox profile between machines (it's all in one folder), but I found it prone to conflicts, with little to resolve those conflicts.
In a similar vein, local-first apps built with Conflict-free replicated data types (CRDTs) can be another way to avoid server dependency. I haven't seen any significant apps built this way yet (just occasional blog posts about it). I imagine the CRDT approach would work better for individual apps, since conflict resolution can be written in a way that works best for a given app, but I also imagine that such apps would not play nicely with a generic sync solution like Syncthing.