It is possible to use threading in a PHP extension without ZTS mode enabled, but the threads must not interact with any of the internal functions (including PHP code itself). This is because without ZTS mode enabled, nothing is thread-safe (obviously), and there's quite a lot of global state in the Zend Engine (ZE). So you're quite limited as to what you can do with threads in this case.
If you do enable ZTS mode, then threads may interact with any internal functions and PHP code, but a shared-nothing architecture must be employed. This is because there are some parts of ZE that are still not thread-safe - most notably, the Zend Memory Manager (ZMM). This means that for each thread, a separate copy of PHP's interpreter must be made (which packs with it its own ZMM), where all functions, classes, interfaces, traits, etc, are copied over to this new interpreter instance to execute things in an entirely separate context.