I have implemented a mark and sweep collector before in lpc. I think the key in getting it right is to have a bug-free trace routine and correctly identifying the root set. One additional requirement is that all allocations need to be recorded since one needs a double pointer system to sweep up the unreferenced data.
I looked it over just now and it doesnt seem particularly difficult to do. There are still some details I need to figure out including where to hook the mark/sweep function into and how often it should be called.
A bigger problem is I think it would be good to have some sort of a plan on how to "evolve" the vm. For example if one were to support a llvm ir based JIT this would have to be planned for since llvms bitcode underlying data structures are in some ways closer to C than C++.
My current thoughts are to try to somehow collect the svalue and various other lpc types into a single hierarchy. I probably need to spend some effort studying vm tech a bit more. v8 looks good as an example though it is much more complex than fluffos since it has a lot of optimization.