No, the behaviour is not different for users. It's just the details of internal implementation
It is protected by this #ifdef because we don't need to call PyType_Ready when declaring old-type classes. However, with Py_LIMITED_API, we should dynamically allocate new type because there are no another way to declare a new type except of calling PyType_FromSpec. The best way to do it is calling readyType() in initialization.
In case of limited API, we should call PyType_FromSpec to declare a new type. This logic is implemented in readyType(), so, we call it in ExtensionOldType because users don't call readyType() when defining old-type classes using PyCXX
You should define Py_LIMITED_API version 3.4 since limited abi for Python versions 3.3 or less does not support calling tp_dealloc: https://bugs.python.org/issue17162 So, just define Py_LIMITED_API as 0x03040000
Supported Py_LIMITED_API