придётся заставить себя не использовать сеттеры длины массива, а использовать встроенные методы
function ArrayLike () { /* NULL */}
// Object.create легко эмулируется
//ArrayLike.prototype = Object.create(Array.prototype);
// вот так, например
var noop = function () {};
noop.prototype = Array.prototype;
ArrayLike.prototype = new noop();
ArrayLike.prototype.constructor = ArrayLike;
// расширим
ArrayLike.prototype.TEST = "Hello World!";
var a = new ArrayLike();
// опробуем новый супер-массив
a.push("a");
alert (a.length + '\n' + a);
a.push("b");
a.push("c");
alert (a.length + '\n' + a);
// повыводим типы
alert( "type: " + typeof(a) );
alert( "class: " + Object.prototype.toString.call(a) );
// и проверим, не тронули ли мы пртотип массива
alert( "a.test : " + a.TEST );
alert( "[].test : " + ['нету тут такого'].TEST);
// и тут тоже
alert( "new Array().test : " + new Array().TEST);