Not considering managed records for a second, plain old advanced records are just syntactic sugar.
TMyRec = record
x: Integer;
procedure PrintX;
end;
// Is the same as
TMyRec = record
x: Integer;
end;
procedure MyRecordPrintX(var self: TMyRec);
So "needed" is quite a strong word, they don't enable something that was previously not possible. But they are still useful for a few reasons:
1. Auto complete and code locality, when writing rec. And hitting Ctrl+space you see all the methods of that record. With the subject.verb(object) Syntax it's very easy to discover the possibilities of how the record can be used by just browsing the methods that come up in auto complete. Or alternatively because all the methods need to be in the record definition it forces the programmer to have all the functionality related to a data type in one place.
It just organizes the code easily
2. Visibility scopes: by now having the ability to have private fields, you can make a Differentiation between internal state and what's visible to the users. While not necessarily that important for your own project, it's great for writing libraries where the user of the library does not need to concern themselves with the inner workings of it
3. Similarity with objects and classes: not just for familiarity of the programmer, but also this enables to use the same code for objects, classes and records. If you write a generic function, that requires a ToString method, you don't care if it's a class, an object or a record that's been used as generic specialization. A special case for this is enumerators, which must provide a MoveNext function and a Current property, which means if advanced records wouldn't be a thing you couldn't have records as enumerators.
4. Generic records and operator overloading: without advanced records where you define operators as part of the record you can't overload operators for generic types
Then with managed records you also gain additional functionality in form of automatically called initializer and finalizer code, which allows things that have previously not been possible at all, and are not possible with either classes or objects