1) There are many different ways of detecting and responding to collisions and which one to use depends on your current scenario.
For a breakout game I would try to model the paddle and blocks as polygons (made up from lines) and the ball as a circle.
Then using vector math you can figure out where two lines (the side of the polygon and the trajectory of the ball)
intersect[
^].
2. I don't think you want the individual obstacle to report the collision.
I understand you want to use events, but for a game such as breakout you're probably better off just iterating over the list of collidable items and pass them to a collision checker.
I wrote
an article on game programming[
^] where I implemented a breakout game, it's in java but the collision calculations might still be useful to you.
Hope this helps,
Fredrik