It's more complicated than that. There are dedicated messages WM_QUERYUISTATE/WM_UPDATEUISTATE/WM_CHANGEUISTATE. So this state is dynamic, but probably changes only one way. On modern Windows you don't get focus rectangles by default on buttons, but you can get them by pressing "Alt", that's how it worked from when this UI change was introduced. It applies both for focus rectangles and keyboard accelerators.
What I imagine we need is to send WM_CHANGEUISTATE to a top level window, let default procedure propagate it using WM_UPDATEUISTATE, and then react accordingly in controls.
Button v6 (or maybe all controls in v6 variants) works differently - newly created button does not have a focus rectangle, until you press Alt. User32 button "inherits" this state probably, and creating new button shows focus rectangle right away.