Possible, yes. Easy, not really, unless you modify the library with your own setPixel() function.
If you use Teensy 4.0 or 4.1, the good news is setPixel() is fairly simple. Make sure you read the file
OctoWS2811_imxrt.cpp.
For Teensy 3.2, 3.5, 3.6, the pixel data is stored in a transposed format which allows the code to run faster but it makes the setPixel() code quite complicated. Long ago the library had somewhat simpler (but nowhere near as easy as Teensy 4.x) code that wasn't quite as fast, so you might look on github history for the very old code. But even then, it's not easy. I'd recommend just getting a Teensy 4.0 or 4.1 if you want to do this, since the code will be so much easier.
On how the Teensy 4 code works, hopefully you can see most of it is just dealing with the different color orders, and then it just writes 3 bytes for RGB and 4 bytes for RGBW into the buffer. The key piece you'll need to modify is this:
Code:
uint8_t *dest = (uint8_t *)drawBuffer + num * 4;
This simple code just multiplies "num" (the 0-based pixel index) by 4, since the entire buffer is known to be 4 byte RGBW data.
Let's say you were to connect 800 LEDs, 100 to each pin, and the first half are RGB and the 2nd half are RGBW. Every pin must transmit the same number of data bits. So those pins with RGB need only 2400 bits, but they will actually get 3200 bits where the last 800 bits go unused. Or more LEDs could be connected to those pins, but for simplicity let's assume all pins have 100 LEDs. The important point is every pin gets 800 bytes of data, whether the LEDs on that pin need it or not.
Here is a way to compute the destination to write within the buffer, which is not necessarily the most optimal way but rather is meant to show the idea of computing the destination differently depending on which LED strip.
Code:
uint8_t *dest;
if (num >= 0 && num <= 99) {
dest = (uint8_t *)drawBuffer + num * 3;
} else
if (num >= 100 && num <= 199) {
dest = (uint8_t *)drawBuffer + 800 + (num - 100) * 3;
} else
if (num >= 200 && num <= 299) {
dest = (uint8_t *)drawBuffer + 1600 + (num - 200) * 3;
} else
if (num >= 300 && num <= 399) {
dest = (uint8_t *)drawBuffer + 2400 + (num - 300) * 3;
} else
if (num >= 400 && num <= 499) {
dest = (uint8_t *)drawBuffer + 3200 + (num - 400) * 4;
} else
if (num >= 500 && num <= 599) {
dest = (uint8_t *)drawBuffer + 4000 + (num - 500) * 4;
} else
if (num >= 600 && num <= 699) {
dest = (uint8_t *)drawBuffer + 4800 + (num - 600) * 4;
} else
if (num >= 700 && num <= 799) {
dest = (uint8_t *)drawBuffer + 5600 + (num - 700) * 4;
}
The LEDs for each pin have their own code. Every pin gets 800 bytes transmitted. So this simple not-necessarily-optimal way just computes the location in the buffer where each pin's data begins, then adds the pixel offset times either 3 for the pins with RGB or times 4 for the pins with RGBW.
While this assumes each pin will have all the same type, either 3-byte RGB or 4-byte RGBW, hopefully you can imagine how you might alter the code to "know" about any combination of different LEDs connected to the same pin. You'll have to use of knowledge of what LEDs are really connected and compute the place where each pixel's 3 or 4 bytes get written.
But if you keep the hardware simpler so each pin has all the same type of LED, then hopefully the code above can get you pretty close to a working solution.
As with all OctoWS2811 answers... when you build your large LED project, I really hope you'll share photos or video!