On the contrary, once you understand how it works, it's trivial to change the program
Let's say you wanted to change the program to yield "Fizzbuzz" instead of "FizzBuzz" in the 15 case, but the rest being the same.
I would first build my string from "fizz" and "buzz" and then I'd have to do .map(capitalize) as the second to last step. If I wanted to have the correct case in the originating strings I could just run them into to_lowercase first before anything happens and capitalize correctly afterwards.
(Actually, the capitalize function itself is probably more complicated than this change)
Similarly, other changes are intuitively easy to stick into the correct place in the program once you know what this program does.