Repeat texture in all directions using cycles nodes
Blender's modulo doesn't work well on negative values I guess.  Shame, but it's fixable.



We can do manual correction for negative UV by taking the absolute value, doing our modulo, then inverting it.

Note that I'm using a mixRGB node to mix these values, which is hacky, but works.  You could always multiply by fac/1-fac and then add the values if you want to be less hacky.

The only reason I can see that you might want to do this is to give different clip/repeat behavior in different axes, and there's an easier way to do that:



Edit: In order to create space between the images, we simply remap the UV after our operation.



Here, I'm scaling each picture down to half its original size, creating a full width border between each instance, and I've created a value node to easily control this value.

You specifically said, "No mapping nodes!" and I see no reason for that, but I've done it how you want anyways.  These math operations could be achieved as easily with a single mapping node as with a series of math nodes.