For starters, if you're working with integers (as in uzi) then you should work with integers in your expr and pong objects. Oh, wait, pong seems only to work with floats arguments.
Thing is, a fold implementation is going to work with modulo and division operators (your expr breaks for input greater than 15 as well as for negative input), and division in floats is often subtly different from what one might naively expect.
In this case it looks like [pong @mode fold] does have a bit of a bug (and probably a result of on unhelpful rounding). But you could implement your own with a bit of patching and arithmetic.
Off the top of my skull and without any testing, something like:
function fold(n, min, max)
var range = max - min;
n = abs(n - min) % (2 * range);
if (n > range) {
n = (2 * range) - n;
}
return min + n;