The Constructor is used by Fuel, you can extend it but if you do you need to copy its parents behavior in order not to break it. "before()" is just an easier alternative.
after() is called directly after your controller method was called but before the output was send. A __destruct() method is called when the controller instance is destroyed, this happens after output was send and limits what is possible because other objects may already have been destroyed.