Creating Simple New Elements, Object Instances and Assigning IDs
Not sure why you need an id, I think you can do the same without any id.

Even the Entity object array is not clear why you need it.

But the first point is to wrap up your code in a function, so you can contain it safely.

So add a function that contains all the code and just design what you need to pass to that function and what you need to have as a public API from your module.

Another point is about your html:

  &lt;button id='btn' onClick='createEnty()'&gt;Create&lt;/button&gt;
  &lt;section id='container'&gt;&lt;/section&gt;


You should do the bind on the javascript code instead. As you already provided an id for the button, you can easely access to the object and bind on the click event.

So your module can be like so:

function MakeEntryModule(buttonSelector, containerSelector) {
    // code here

    // here the return object with the public methods
    return {
       myMethod: myFunction
    }
}

// then you can do so:
var entryModule = MakeEntryModule('#btn', '#container');


You can also use an anonymous function that is called directly:

var entryModule = (function(a,b){
    // code goes here
})('#btn', '#container');


This is fine, but the previous is more clear when you have parameters.

So here is a rewrite of your code:

function MakeEntryModule(buttonSelector, containerSelector) {
    // cache the container element to avoid 
    // performing the search each time.
    var container = document.querySelector(containerSelector);

    // just pass title and description to the createEntry
    // function to be able to make it more generic.
    function createEntry(titleText, descriptionText) {
        var entry = document.createElement("div");
        entry.classList.add("entry");
        entry.appendChild(createSpan("title", titleText));
        entry.appendChild(createSpan("description", descriptionText));
        entry.appendChild(deleteButton(entry));

        container.appendChild(entry);
    }

    function createSpan(className, text) {
        var spn = document.createElement("span");
        spn.classList.add(className);
        spn.appendChild(document.createTextNode(text));
        return spn;
    }

    // the delete element can be make so:
    function deleteButton(toDelete) {
        var btn = createSpan("remove", "remove");
        var _listener = btn.addEventListener("click", function () {
            btn.removeEventListener("click", _listener);
            toDelete.remove();
        });

        return btn;
    }

    // here you bind your createEntry to the button
    var _listener = document.querySelector(buttonSelector)
        .addEventListener("click", function () {  
            createEntry("title text here", "description text here");
        });

    // the only public API needed is the remove listener
    // to avoid memory leak
    return {
        removeListener: function () {
            document.removeEventListener("click", _listener);
        }
    }
}


You can even make it shorter using modern Javascript syntax:

function MakeEntryModule(buttonSelector, containerSelector) {
    const container = document.querySelector(containerSelector);

    function createEntry(titleText, descriptionText) {
        const entry = document.createElement("div");
        entry.classList.add("entry");
        entry.appendChild(createSpan("title", titleText));
        entry.appendChild(createSpan("description", descriptionText));
        entry.appendChild(deleteButton(entry));

        container.appendChild(entry);
    }

    function createSpan(className, text) {
        const spn = document.createElement("span");
        spn.classList.add(className);
        spn.appendChild(document.createTextNode(text));
        return spn;
    }

    function deleteButton(toDelete) {
        const btn = createSpan("remove", "remove");
        const _listener = btn.addEventListener("click", () =&gt; {
            btn.removeEventListener("click", _listener);
            toDelete.remove();
        });

        return btn;
    }

    const _listener = document.querySelector(buttonSelector)
        .addEventListener("click", () =&gt;  
            createEntry("title text here", "description text here"));

    return {
        removeListener: () =&gt;
            document.removeEventListener("click", _listener)
    }
}


You should use const and let instead of var if possible, use var only if you have browser compatibility requirements.

About arrow functions, they are very compact and elegant, but use with carefull as they have a different behaviour compared with normal functions.

They are good for event handlers as they bind the declaration context, with the "correct" this object scope.

But they can drive to performance issues in some situations.

I get rid of the objects array, if you really need you can add it without problem.