Button is currently only supported on Linux, but there are plans to also support OS X and Windows soonish.
There is no need to exhaustively list dependencies (such as C++ header files). Dependencies for any language can be determined automatically.
Outputs removed from the build are automatically removed from disk. Changes are determined by file contents, not just by timestamps. Combined with implicit dependency detection, correct incremental builds can be ensured.
Any build task can also be a build system. This simple feature is incredibly powerful. As part of the build, you can generate your build description with, say, a high-level scripting language like Lua.
Dependencies can be watched to automatically trigger a build when they change. This can help speed up the edit-compile-test development cycle.
A graph of the task graph can be displayed. This helps give you an immediate and intuitive understanding of the structure of your build.
This is not a language-specific build system. While there are convenient abstractions for building common languages, there are no restrictions on building projects not covered by those abstractions.