1 and 2.
You'd have to add one or two global variables, something like "Pressed1Time", "Pressed2Times" and "Pressed3Times" - all set initially to zero.
When the button is pressed, we call the changeEffect() function and there you'll have to detect if the button was pressed 2 or 3 times within a given time span.
Question here is we should change the effect at this time.
When a button is pressed and "Pressed1Time" is zero or "Pressed1Time"+"Allowed time between button pressed" is less than the current time (we waited too long), then we'd store the current time in "Pressed1Time", and reset both "Pressed2Times" and "Pressed3Times" to zero.
When a button press is detected again, and "Pressed1Time" is not zero, and the current time is less that "Pressed1Time"+"Allowed time between button pressed" (within allowed wait time), then we set "Pressed2Times" to the current time.
If we detect a button press again, and "Pressed2Times" is not zero, and the current time is less that "Pressed2Times"+"Allowed time between button pressed" (again within allowed wait time), then we set "Pressed3Times" to the current time.
Now in the effects we can change direction and such based on "Pressed2Times" and/or "Pressed3Times" begin zero or not.
This will be a little convoluted, but I do not think this is impossible.
There are 2 options when connecting 3 strips.
If the effects should be identical, then this would be very easy (assuming these are the same type and length): You can connect all 3 strips to the same data pin on the Arduino.
This will have them behave identically.
If the effects should not be identical, then you're in for some trouble.
FastLED does support multiple strips, controlled individually, just fine. However, your effects will have to split time in doing each step in the effect. This can be a challenge.