This works if you wrap it in a keras Lambda layer:
def add_numpy(vals):
  x, y = vals
  return tf.experimental.numpy.add(x, y)

inp1 = tf.keras.layers.Input(shape=(1,), name="inp1")
inp2 = tf.keras.layers.Input(shape=(1,), name="inp2")

out = tf.keras.layers.Lambda(add_numpy)((inp1, inp2))

m = tf.keras.Model([inp1, inp2], out)

m([tf.constant(1.), tf.constant(2.)])

AFAIK the result of calling a Keras functional layer is a KerasTensor which I think is just a placeholder tensor with certain type/shape information to propagate to other layers. The NumPy API probably doesn’t recognize that right now, so this workaround defers the NumPy calls so they work on actual objects they can recognize.