But is it ok to use object as value assuming object is a "single value":

Yes. of is supposed to take any value and put it inside the container. An object certainly is such a single value.

Grid.of(2, 2, [1, 2, 3, 4])

No. of is supposed to take a single parameter. If you want to put multiple values inside a functor, put them inside an other structure before and put that structure inside the functor, or construct the functor by something else than its point function (of).

Grid.of({ width: 2, height: 2, list: [1, 2, 3, 4] })

No, if you expect that to return the input then it won't work. of should take the input as-is and wrap the structure around it. In case of your grid, it would most certainly look like this:

So the above call would create a Grid of objects, not a grid of four numbers. Notice that of is not the only way to construct an instance of a functor, it's only the way to construct an instance from a single element.

Notice that of is most important as part of an Applicative, not so much interesting for ordinary Functors. Btw, if you're interested in functional programming concepts, you should also be able to make your Grid a Monoid, a Traversable and a Monad - see https://github.com/fantasyland/fantasy-land.