alright i think i got the situation now and threw together a few examples. both examples use a basic road tile which consists of a plane and a arrow component as seen in the third picture. also the methods used here are a little different from yours since im relying on hit results under the cursor.
for the first example i went with a location based approach. so to begin we get the hit result under cursor, we then cast the hit actor to the road tile class to see if we hit a road, if false then we just set the current road tiles (the one we are placing) location to the cursors location, if true then we proceed with the script. the next step is to get the cursors location in relation to the hit road (the one in the level), to do this we use inverse transform which will convert the cursors location from wold to local space. next we do a check to see is the cursor so far to the left or right of the road, we use the in range node for this. if the cursor Y is in range then we can assume it might be in line with the existing road, if its out of range then we know the cursor is either to the side of the road or at a angle, so proceed if in range (true), if false do nothing or set location based on cursor location. ok so at this point we have established that the cursor is likely either on the existing road or is in front / behind it. our next test is to figure out if the cursor is in front of or behind the road piece via its X value. if X is positive then we are in front, if negative then behind. now we can use that information to place the location of the new road, we take the actors location and add to it a value made up of the direction and distance we want to place the road. the forward vector tells us which ways front then we just multiply it by our tile size. i also set the rotation based on the arrow.