In theory, you could connect resistors in a R-2R ladder or just binary weighted to several pins and write 8 bit numbers to a native port. You'd probably set up a timer to trigger a DMA channel to copy bytes from a buffer to the pins. It would probably look similar to the code in OctoWS2811, except using only 1 DMA channel instead of 3, since you just want to write all the pins once per update rather than 3 times.
Realistically, you can probably expect to get about 3 to 5 million updates per second using DMA, for about 20 to 33 updates per period of 150 kHz.
To do this, you'll need to dive into some fairly low-level coding. Probably best to start with OctoWS2811 and connect resistors to the 8 pins. I'd suggest starting simple with the code, like configuring the LED strip length to be the number of points per waveform and fill the output buffer with your sine wave data. When you watch the waveform on your oscilloscope, you should see an 800 kHz waveform for the LED protocol, where the first part is maximum voltage because all pins drive high, then your analog voltage should be in the middle part, and the last part should be minimum voltage because all the pins drive low. Before you dive into the complexity of timers and DMA channels, I highly recommend just using the existing code as-is (maybe even use setPixel with specific colors to get your sine wave written into the buffer) to get to that point.
Once you get that waveform, then the next step would be cutting away the 2 unneeded DMA channels, so you're not driving the pin high and low at the beginning and end of each 800 kHz cycle of the timer. Again, get that working before messing with the timer. The key to success with this sort of project is approaching it in small steps and leveraging each success to move on to the next. If you just start tearing into all the complex hardware details at the same time, odds of getting everything working are slim.