Is there a way of keyframing RGB curves?
All of the node data is available through python so a workaround could be to use a python script to adjust the curve at the right time.

To view the curve data you can use a script like -

import bpy

theCurveNode = bpy.data.materials['Material'].node_tree.nodes['RGB Curves']

print("R Curve points are:")
for point in theCurveNode.mapping.curves[0].points:
    print(point.location)

print("G Curve points are:")
for point in theCurveNode.mapping.curves[1].points:
    print(point.location)

print("B Curve points are:")
for point in theCurveNode.mapping.curves[2].points:
    print(point.location)

print("C Curve points are:")
for point in theCurveNode.mapping.curves[3].points:
    print(point.location)


So curves[] will always be 0-3 for RGBC and each curve can have any number of points. It would be tedious but you could use the script to generate a list of values that you then use as data for the script that imitates keyframes. Possibly calculating them or interpolating smoothly between frames.

theCurveNode.mapping.curves[1].points[2].location.x = myCurvePointLocX(1,2)
theCurveNode.mapping.curves[1].points[2].location.y = myCurvePointLocY(1,2)
theCurveNode.mapping.update()


Be sure to run mapping.update() after altering any curve points.

You could then setup a script that appends a function for bpy.app.handlers.frame_change_pre that alters the curves based on frame_current.

I can't say this is a recommended method but in theory it could work.