The issue can be reproduced in a simpler project with a single form and even with designtime-created radiobuttons: Just add something like
RadioGroup1.Controls[1].Visible := false;
to the
OnCreate event of the form. Running this project, the second radiobutton will be visible although it should be hidden. Check out attached project demonstrating this.
I think I found the guilty code: In radiogroup.inc (in folder lcl/include of the Lazarus installation), there is a procedure TCustomRadioGroup.UpdateItems which updates the radiobuttons on several occasions. A bit down this code there is a loop running over all radiobuttons containing the line:
ARadioButton.Visible := true;
which overwrites the Visible setting.
Commenting this line out, fixes the issue.
Please test this modification, and try to see whether there are any regressions. If all works fine, I'll write a bug report and apply this fix.