Access violation was because of a memory overwrite. TStream.Read doesn't have a TBytes overload in FPC, so the stack was overwritten instead of the array's content.
The old uCEFApplication.pas is renamed to uCEFApplicationCore.pas and a new uCEFApplication.pas is created that only contains the Controls/Forms unit related code and is backward compatible to existing code.
This allows the creation of a SubProcess executable that doesn't initialize the VCL with all its problems (GlobalAtom leak in Delphi 6-XE, Application.Handle, OleInitialize and other unnecessary init-code).
ujCEFMiscFunctions.GefCursorToWindowsCursor is renamed to >>C<<efCursorToWindowsCursor and moved to uCEFApplication.pas to prevent the inclusion of the Controls unit in Delphi 7-XE.
Added optional TCefApplication.DestroyApplicationObject:Boolean property that causes the VCL's Application object to be destroyed. This will undo all the code from TApplication.Create. The Default value is "False" because if user code accesses the Application object in a sub-process it will cause NullReferenceExceptions.