If each project can only be in one stage at a time the most straightforward approach would be to group projects into stages using separate view models. For example:
var project = function(name) {
this.name = ko.observable(name);
};
var stage = function(name) {
this.name = ko.observable(name);
this.projects = ko.observableArray([]);
};
var viewModel = function() {
this.stages = ko.observableArray([]);
};
If you want columns per stage in your view this is now easy to do:
<ul data-bind="foreach: stages">
<li class="column">
<h5 data-bind="text: name"></h5>
<ul data-bind="sortable: { data: projects }">
<li class="project">
<span data-bind="text: name"></span>
</li>
</ul>
</li>
</ul>
Here's a fiddle with a demo.