Best practices to hide elements on a page
As Alex Gill mentioned in the comments this is an open ended question.

My guidelines though are as follows:


never hide something via CSS if you can hide it via application code, especially if you don't really want it inside the HTML. Hiding stuff with CSS is only acceptable if you want to have them "preloaded" in order to display them later on using javascript
hiding something via module (e.g code from your features module, if you have one) is good since it can work with any template


In regards to hiding form elements please note that:


hiding stuff with CSS still makes it possible for "smart" users to alter the hidden defaults, possibly via Firebug etc. So you should not assume that users will not be able to alter form elements that they cannot see.
removing form elements via code may have side effects down the line in case you've removed stuff that is expected in validate functions. E.g if you've removed a mandatory form element then it'll never get submitted.