Some suggestions and requests:
You have very much logic inside the AFGearVehicle class. Most of that should be inside of a component instead. The reason for that is it makes inheritance easier. For example in my project I have a base class “AVehicle” that inherits APawn. Now there is ABoat, AHelicopter, AWheeledVehicle and APlane. All of them inherit AVehicle.
For cars I use the default UE4 vehicles right now so I just have to add some components to AWheeledVehicle. If I wanted to use your plugin I would need to copy everything from AFGearVehicle to AWheeledVehicle.
Do not override UPhysicalMaterial. It just makes everything harder for existing projects to use your plugin. I would need to recreate all physical materials. It also prevents users from defining settings per vehicle (friction, roughness, smoke particles etc.)
Instead do it similar to UE4’s vehicle system. They have a tire config class where you can define friction etc. per physical material surface. You can then assign the tire config per wheel. (You already have UFGearTire or UFGearWheelOptions that you could use here.)
Do not override USkeletalMeshComponent. Basically same as above. Makes it hard to switch to your plugin. I also see no usage of your custom class in the code.
Replication! I know it’s already on your list, just saying this is important.
Backfire detection for the effects class. Somebody else already suggested.
Support for more platforms. Probably works but if you could support Linux and Mac that would be great.