Objects allow for modular dependency, and a level of versatility you cannot achieve in records. For example I could have a simple particle definition within my game with a few special case child objects. We'll call 'em:

TParticle
TTimelineParticle class(TParticle)
TFaderParticle class(TTimelineParticle)

Rather than go into details I'll keep it high level and abstract. You could use specific definitions within the 2nd class to provide specific or scriptable points in the particle's lifetime, changes to anything it has or does, while the 3rd class could provide a specific fade one image out and another in. Doesn't really matter how or what you do with it, but the framework is simpler than that of a huge record with data variables for every possible particle setting. Not to mention smaller and more compact.

You must adhere to strict creation and destruction protocalls to avoid memory leaks, yes, but this is very easy and not obstructive in any way. It makes debugging no less or more difficult though, as you can trace problems etc to their source, plus you can manipulate the object(s) without affecting any other game code.