If the app is sandboxed, it won't have permission to replace itself. Sparkle works around this issue by using a non sandboxed helper. It's open source, so you can check exactly what's Sparkle is doing and replace it if you want.
Topic:
Code Signing
SubTopic:
Entitlements
Tags: