Since Blender doesn't create new edges when 2 faces intersect I wonder how can do this: I have a roof on both sides of my house but i want to join the top faces of the roof together at the center. See the red arrows. How
In Edit Mode select a vertex, snap a cursor to it (Shift+S-->Cursor to Selected) and change the transformation orientation type to Local. Enable the Snaping Tool (click the 'magnet' icon and change its type to Vertex). Press G and then choose the axis (press X, Y or Z, depending on your situation) twice and move a mouse cursor until it snaps to other vertex. Then select the whole mesh (A) and hit W-->Remove Doubles.
In my opinion, the fastest way is using F2 add-on: http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Modeling/F2
Move the mouse near the "missing" vertex (don't click any button)
More info on the F2 Addon:
Quad from vertex.
When a single vertex is selected, a new quad is created by creating a new vertex. The position of this new vertex is calculated based on the three existing vertices. These are the selected vertex, and two vertices to which it is connected via open edges. An open edge is an edge which is only part of one face, or none at all. The newly created quad has the same material and normal direction as the neighbouring faces.
Quad from edge.
Similar to the quad from vertex functionality, this is based on open edges. The selected edge has to be connected to two open edges. The vertices which belong to these edges are used to create a new quad.
If there are multiple ways to create a new quad, the position of the mouse cursor is taken into account. Of the multiple new faces which are possible, the one which will be closest to the mouse cursor (in 2d screen-space) is the one which will be created.