Best method to further execute the DRY principle and/or raise performance in my script? (client login/signup system)
This code appears to be fairly clean and reduced well to me, I don't see much in the way of any DRY violations, but if you're looking for any places for tightening up your code:

If you can use the newer javascript goodies, then use array destructuring assignment and object shorthand assignment

Given

function usp(parent) {
  return [parent.username.value, parent.password.value];
}


Then

const [user, pass] = usp(create);
database.push({ user, pass });


and use '==' with caution as it isn't strictly equal, it will attempt a type coercion, i.e. '5' == 5 is true, where as '===' won't, i.e. '5' === 5 is false. As a rule, you will almost always want to use '===', only reach for '==' when necessary.

Comparison operators

const [user, pass] = usp(log);
for (const x of database) {
  if (x.user === user &amp;&amp; x.pass === pass) {
    ...
  }
}


Looping through any data structure has an O(n) complexity, there's nothing really you can do here, but this is completely fine as any increases in data size is a linear increase in processing.