In short: not very.
Older versions of Xenix are based on V7 or System III (which are very similar to each other). They had the bourne shell, and large parts of the standard library were already available, e.g. stdio, malloc, alarm, lseek, getenv, but they were lacking many things you'd take for granted: there was no networking beyond serial ports, no threads, no shared memory, no TCP, no named pipes, no shared libraries, no X11 or other graphics/multimedia support. Many of the "standard" header files didn't exist or had different names.
Feasibility of running modern software: low. Autoconf wouldn't work, and any software using threads, interprocess communication, networking, or large amounts of memory wouldn't work.
The latest versions of Xenix are based on System V R2, which was standardized as the "SVID" (System V Interface Definition) which formed the basis for IEEE Std 1003.1-1988 (POSIX). The final version of Xenix was actually released in 1991, three years after POSIX was finalized, and it had many features you'd expect from a "modern" UNIX such as shared memory, named pipes, as well as a few features that were backported from SVR3 such as networking.
Feasibility of running modern software: arduous, but technically possible. There were no shared libraries, no native pthreads, but most of the building blocks to "emulate" a modern system: enough of a shell to run autoconf, interprocess communication such as named pipes, networking (TLS and BSD sockets), shared memory, semaphores. These features were not necessarily in the "format" that modern software expects, but could be adapted with wrappers. Missing header files and missing type definitions can be substituted, and in fact complex software such as pthreads and X11 was ported. Your biggest problem would be the lack of a modern compiler and toolchain (could technically be ported) and a mountain of dependencies that haven't been ported (yet).