Interface, a primeira vista, pode ser um pouco dificil de compreender mesmo, e só vai entender mesmo com o tempo. Apesar de ela ter sido utilizada de diferentes maneiras, como aquelas de “marcação” (Serializable, SingleThreadModel, etc. - Argh! Pessoalmente acho a idéia de Attributes do C# muito melhor), ou então até mesmo para armazenar Constantes (outra coisa meio bizarra!), entre outras coisas malucas, o principal uso é, como o próprio nome sugere, separar a interface da implementação (classe)!
Interface é muito utilizada quando ainda não estamos (e nem precisamos estar) preocupados com a implementação, o que normalmente acontece em fase de projeto, isto é, precisamos definir as interações (comunicação) entre objetos, sem depender da implementação específica pra ele. É um recurso extremamente poderoso que, quando bem usado, é possivel deixar a aplicação bastante flexível/dinâmica quanto a forma de implementação, podendo utilizar-se desde herança até polimorfismo.