I have a distant memory that event were simple not implemented for all bitness/cpu combinations.
But a recent look at the IFDEF blocks says they are (or well at least the code seems to be "not empty").
In any case you will most likely find that the issue is in "simulating the call" to the procedure.
Any call (event or otherwise) needs to pass the parameters. Some need to be in CPU registers, others need to be on the stack, possible with specific alignments. (depends also on calling convention)
Newer versions of Delphi have some API to make calls using RTTI... I don't know what is avail in FPC 3.3.1 (and I heard somewhere it may need some so/dll - but I may have mistaken something else).
Anyway, afaik, the script engine does not make use of this in FPC.
Instead the script engine "builds" the callstack itself. That requires assembler code, as it needs to set the correct cpu registers.
There is an inc file for each CPU, if you want to look at it...
I don't recall exactly, but I may have had some issues with that even in normal procedure/methods calls... Not sure, could be the got fixed.
Anyway, the more architectures were to be supported, the more risky this approach is. Because you need to test a ton of different calls (with different mix of parameters by type and order) for each of them.
PascalScript offers a 2nd way:
RegisterMethodName
RegisterPropertyNameHelper
(the version in Lazarus has more of this than the original)
This register a function that doesn't get called with the parameters directly as given by the caller.
E.g. if the caller does
Foo(1,'abc')
then the registered method does not get an integer and a string.
It gets a "TPSStack" object. And that will have 2 entries that you can get as int/string (or as TPSVariant... which you will need e.g. for enum).
The advantage: It doesn't need the per-CPU asm stuff. The method signature is known at compile time, and it is a normal method call generated by the compiler.
But afaik that doesn't exist for events ....