This is a really nice question and a tough undertaking. And you can do it! (I’ve done it in an earlier implementation by myself ;))
In GraphHopper you have junction nodes (or we call them tower nodes) and the ‘supporting’ nodes between the junctions, the pillar nodes. (you can assume that the speed between two junctions is unchanged, if it would change we introduce new ‘junctions’).
Having the time from the snapped points is simple, but then you need to ‘spread out’ this information to the other involved junctions. And of course, the matched result does not only contain the junction coordinates … but maybe you find a simple approximation, the first step would be to calculate the resulting speed from giving timestamps.
BTW: a completely different use case, but with a potentially similar solution, could be to estimate the time taken for GPX files without any time information.