Writing a Confluence plugin that works across multiple versions of Confluence can be a bit of a challenge. Especially when the Confluence developers accidentally ship changes that break binary compatibility in point releases.
The JIRA developers recently spent a lot of time in JIRA 5 solving this problem by moving the "blessed" Java API for JIRA into a separate API jar.
Having a clearly-defined API gives plugin developers the confidence to know which services and methods they can call safely without fear of things changing underneath them.
It also gives confidence to Confluence developers to know which areas of the code they can change freely, and which areas need to be changed with care to ensure continuing compatibility.