All of Unity's built-in GUI elements are self-contained. When called, they will handle their own click events and repainting automatically. You should be able to call GUI.Button() or GUILayout.Button() directly within the OnGUI() method and have it display.

Event.current.clickCount and Event.current.Repaint are generally used for creating your own GUI elements completely from scratch.

GUILayout.BeginArea and GUILayout.EndArea creates a rect in which to lay out multiple GUI elements. The elements that it contains will draw regardless of whether they're contained within an area, the area is simply an easy way to position an entire group of elements.

There's also an issue in your first code example: "okToDraw" will only be true during the click. It will immediately revert to false on the next OnGUI call. To have it persist, you'll need to cache this value outside of the OnGUI method.

If Unity's built-in button doesn't include all of the behavior that you need, you may have to create a new button type from scratch. This is the code for Unity's own GUI.Button, it's a pretty good example for how to use Event.current: