Mapbox Vector Tiles appear to lack accurate intersection nodes. Is this a bug? I.e. should the tile's geojson include a shared node between two intersecting streets?
This is likely not a bug, but a consequence of the fact that OpenStreetMap does not have a strict node-edge topology for road networks, with each segment of road starting and ending at each connecting junction node as you desire to have.
E.g. if a 2 km long road in a city has 10 connecting streets, but no properties of the main road change (e.g. speed limit), then there is nothing in OSM that prevents you from drawing a single 2 km long line to represent the main road, only adding in junction nodes to connect the side streets.
Since processing of data to create vector tiles is likely on a record-by-record basis as most toolchains for OSM rely on relational databases like PostGIS, that 2 km long road will also become a single feature in the vector tile (or cut up in multiple pieces for multiple tiles).
And as vector tiles are mainly for display purposes, and require extensive generalization to make them work at scale, it is very likely that the connecting junction node gets dropped during generalization, meaning two intersecting roads may no longer have the junction node in their geometries.
Honestly, vector tiles should not be used for analysis. Use the original data instead, or data imported into a PostGIS database with tools like osm2pgsql.
I have never used it, but you may need to have a look at PostGIS Topologies as well:
https://postgis.net/docs/Topology.html