How do I use Py_BuildValue() to create a tuple of arbitrary length?

You can’t. Use PyTuple_New instead, and fill it with objects using PyTuple_SetItem — no