If we skip the idea of single prim rotations with an offset center. As it will only work on llSetRot/llSetLocalRot i.c.w. llSetPos, which will result in two problems:
A. Fixed 'speed' same as Rot, items first rot then move or vice versa. Splitting up into multiple llSetRot/llSetPos will still result in 'jerky movements'
B. Can't use on linked objects (llSetPos is sometimes borked on child prims).
We can only use multi-prim rotations for offset center rotations or any other forms of complex rotations. This shifts the problem from 'how to rotate' to 'how to move/rez/delete object groups in unison'
Option 1: scripted link/unlink. Issues:
1. Perms problem... need to ask owner for permissions
2. Can only unlink per prim.
3. Relink will make prim 'parent'
4. Doesn't work for physics objects (they'll blow up nicely)
5. When moving/deleting etc... parts can be left behind. So you'll eventuallly still need option 2.
I've never tried creating grouped link/unlink system as the task of 'managing' the system looked quite complex. (It's certainly more complex than the whole rot issue).
Option 2: 'multi object' objects System:
1. Need rezzing (llRez) of child objects from parent object
2. Need a 'keep alive' system based on llListen or llSensor to see if 'parent' object is deleted
3. Need a 'move with parent' script in child objects.
Issues:
1. Timing lag / daily server 'resets' -> make the 'rezzer' also check for existence of child objects, and rerez them if they've decided to kill themselves.
2. Movement. Do NOT use moving_end events in rotating objects... the rotatie itself is a movement. Or use them and check for a specific offset of movement between moving_start and moving_end
3. 'Kinematics' style rotations where child objects rotate with their parent objects is very difficult/impossible -> A reason to use the link/unlink system if you need this.
4. Does NOT work for moving physics objects. (I'm still working on a way to get multiprim rot in a physics system)
All in all it's well possible to have 'multi-object' objects. For a complete kinematics/multi jointed system it's probably necessary to combine both methods. (I have not tried this yet, but it would be a very nice scripting system to have

Some other tips when working on localrot things:
1. perpetual localrot items (ie clocks) are buggy... (= randomly move) This is probably caused by a erroneous 'recalculation' of the object's position based on the individual prims pos, every day or so. It can be fixed by a script checking and resetting the position, though.
2. A lot of the single prim move/scale (prim param) functions are buggy/malfunction when the prim is a child prim in a linked object.
All in all... the basic rot: 1 % of the work, extra plumbing: 99% of the work.