Как записать рекурсию (функц. глубокого копирования) в виде цикла?
Вместо рекурсии можно использовать стек:

function clone(value) {
  const clone = {};
  const stack = [];

  for (
    let i = 0, source = [ [ '', value ] ], target = clone;
    i < source.length || stack.length;
    i++
  ) {
    if (i === source.length) {
      [ i, source, target ] = stack.pop();
    } else if (source[i][1] instanceof Object) {
      stack.push([ i, source, target ]);
      target = target[source[i][0]] = Array.isArray(source[i][1]) ? [] : {};
      source = Object.entries(source[i][1]);
      i = -1;
    } else {
      target[source[i][0]] = source[i][1];
    }
  }

  return clone[''];
}
как правильнее всего будет это сделать?
Перестать заниматься ерундой и начать использовать готовые решения. Например.
Придумался вот такой вариант:
let clone = {};
for (key in car) {
	if (typeof car[key] === "object") {
		clone[key] = Object.assign({}, car[key]);
	}
	clone[key] = car[key];
}