First, your road sprite aren't really well designed. You shouldn't split the road in half. You should create a whole section of road and also create intersection sprites of the same size. Here in your cap you can't create a T intersection for instance. Then you start to see that you'd need many more sprites.
Second, one of the way to generate a street would be to create the road network first. By road network I mean simple 0 or 1 in your array to figure out if it's a road cell or a non road cell.
Then you just have to spawn the road sprite and check their surrounding to display the proper frame.
Now the algo to create such a road could be :
loop until you can't find any available cell
- > cell at X,Y = 1 (1 = road, 0 = no road)
- > choose a random direction between (1,0) (0,1) (-1,0) (0,-1)
- > if the next cell is a valid one (not already a road cell and not out of grid) set X and Y to it.
But then you will have a simple path without branching. For branching you'd have to go back in the road you've made and check for other adjacent available cells.
Anyway, look at some maze algorigthm you might find some good tips.