The x, y, width, and height variables are redundant if you store a rectangle.
All you need is:
Touch could either have an x and y or extend Point, adding the 'handled' field. No reason for a rectangle or intersects().
You are correct in using a 'handled' flag, it is used to prevent gui elements from handling events when they are underneath another element. This only works if the elements are collision-checked in order.
If that is guaranteed to never be a scenario, it is 'overkill.'
Also, don't use "" strings (or null objects) to represent a boolean state. Just use a boolean.
Past this much functionality, you might as well use scene2d, or utilize Swing if applicable, i.e. using JComponent/JPanel and MouseEvent/MouseListener.