Here ya go.
A, B, C, D, E, F (blue points) are the destination points.
A, B, C, D, E is the convex hull. PQRST (gray points) is the polygon whose edge midpoints are A, B, C, D, E. (This polygon will be unique for odd numbers of convex hull vertices.) The solid gray line segments are a section of the Voronoi diagram created with the points P, Q, R, S, T; they are collectively your paths. Each of these solid gray line segments is a subset of a pairwise perpendicular bisector from the set {P, Q, R, S, T}. V0, V1, V2 (green points) are intermediate points on the paths. Since F was inside the convex hull, we must give it special consideration. W is the foot of the perpendicular from F to the nearest path segment. The line segment FW is added to the paths.
To prevent there being lots of points left inside the hull, instead of taking a convex hull, we can take some sort of "largest non-self-intersecting polygon hull," which is allowed to be concave. Or we can split the set of destination points into smaller chunks, do the above on each chunk, then link the paths created by each chunk.
It makes sense to do this anyway, since as your village/city grows, new locations would be added in incremental chunks, without the whole road plan being rebuilt each time.
(To choose chunks, we could say there should be about n locations in each chunk, calculate the approximate number of chunks from that, then do a K-means algorithm to choose chunks that are individually bunched up.)
This should also be generalizable to 3D.