cycling 4 LEDs at varrying speeds

The 'blink without delay' example sketch demonstrates the technique which is fundamental to solving this problem.

Have you tried running that? If not, give it a go and play with the source code and make sure you understand how it works.

Making the blink frequency and duty cycle vary over time is as simple as using variables to control the blinking instead of constants, and changing those variables however you want. If you want the frequency to reduce over time, then put in code that runs at regular intervals and reduces the blink interval. (And refer back to the 'blink without delay' to see how to run code at regular intervals.)

If you want to apply this logic to multiple LEDs independently then you need to replicate the code and data used to blink an LED. This can be as simple as copy/paste and rename the variables to make everything unique, and there's nothing stopping you from giving that a go with two LEDs to prove the concept. However, a better way to do similar things to multiple outputs is to put your data in an array and have your code loop through the array doing the same thing for each entry. In this scheme, instead of having a constant or variable holding the pin number for the LED, you'd have an array of pin numbers; instead of having a variable holding the last 'blink' time for the LED you'd have an array of 'last blink times', one per LED; if the frequency is variable then you'd have an array holding the current blink interval for each LED. And so on with any other data you introduce to control your LEDs.